Puedes usar Emacs. Emacs es principalmente un editor, pero también incluye muchas funciones relacionadas que te permiten beneficiarte de las capacidades de Emacs al hacer cosas diferentes a la edición de archivos. Una de estas funciones es modo Shell, donde editas un comando con Emacs y luego presionas Enter para ejecutarlo.
Puedes descargar Emacs desde Emacs For Mac OS X o desde gestores de paquetes como Homebrew, MacPorts o Fink.
Emacs tiene sus propios comandos de edición que son completamente diferentes a los de Mac, pero al menos el Emacs For Mac OS X viene con los comandos estándar de Mac predefinidos.
Para iniciar Emacs y simplemente usarlo para ejecutar un shell:
emacs -e shell -e delete-other-windows
Consulta el Manual para comandos relacionados con el shell como la navegación del historial. También puedes usar F1 m para ver una lista de combinaciones de teclas que se aplican específicamente al modo Shell.
El modo Shell te proporciona la edición de línea de comandos y scrollback infinito de Emacs. Tiene algunas desventajas: las aplicaciones de terminal a pantalla completa no funcionarán y solo obtendrás una completación básica de nombres de archivo en lugar de una completación contextual. El modo Shell admite la salida en color, pero las aplicaciones pueden no ser capaces de detectarlo, por ejemplo, /bin/ls
no lo hace (puedes engañarlo con alias ls='TERM=xterm-256color ls -G'
).
Salir del shell no cierra Emacs, porque usar Emacs solo para ejecutar un shell es inusual. Sería posible configurarlo para que al salir del shell se cierre Emacs si no está haciendo nada más, pero eso sería material para una pregunta separada en Emacs SE.
Alternativamente, puedes preferir Term a Shell. Term es un emulador de terminal completo. Esto significa que Emacs transmite la mayoría de las pulsaciones de teclas al shell subyacente. Por ejemplo, Tab invoca al mecanismo de completación del shell. Sin embargo, Emacs sigue manejando algunos comandos internamente, en particular todas las combinaciones de teclas de Command como copiar y pegar. Además, Control+C invoca comandos del modo Term. Por otro lado, Shift+<em>flecha</em> se envía al shell. Sería posible hacer que Emacs lo maneje, pero no es sencillo dado que desincronizaría la posición del cursor entre Emacs y el shell. No sé si hay un paquete de Emacs por ahí que resuelva esto.
Si todo lo que quieres es soporte para el mouse y Shift+<em>flecha</em>, hay plugins de zsh para eso:
Desafortunadamente ninguno maneja copiar la selección al portapapeles con C. El comando Meta+W (Meta suele ser option, pero depende de la configuración de tu terminal) copia al portapapeles propio de zsh. Consulta [zsh copiar y pegar como emacs](See https://unix.stackexchange.com/questions/51933/zsh-copy-and-paste-like-emacs) para saber cómo sincronizar el portapapeles de zsh con el sistema.