En algunos sistemas Unix, puedo escribir Ctrl-A o Ctrl-E para moverme al principio o al final de la línea. En algunos sistemas Unix no puedo y simplemente imprime ^A o ^E, etc. ¿Qué controla si esta combinación de teclas funciona como espero (moverse por la línea de comando) o imprime el carácter ^A, ^E, etc.?
Respuesta1
Todo depende de la implementación específica del shell (es posible que tenga un shell predeterminado diferente en diferentes sistemas o incluso para diferentes usuarios dentro de un solo sistema, por ejemplo, bash, ksh, tcsh, etc.).
También depende del propio shell.
Por ejemplo, bash admite dos modos: emacs y vi. Cada modo tiene sus propios atajos (emacs o vi like). Para cambiarlo tienes que ejecutar set -o emacs
(normalmente es el predeterminado) oset -o vi
Puede encontrar más información en la documentación específica de su shell.
Respuesta2
tl; dr
set -o emacs
habilitará las combinaciones de teclas Ctrl-A, Ctrl-E, Ctrl-B, etc. de emacs en la mayoría de los shells que probablemente utilice.
Es posible que el shell no tenga ninguna capacidad de edición de líneas o que esté en el vi
modo de edición (el único especificado por elestándar).
Cuando no está en emacs
modo de edición, Ctrl-A y Ctrl-E no tienen ningún significado especial. Si la configuración echo
y echoctl
stty/termios están activadas, todas las teclas de control que no se manejan especialmente se mostrarán en la ^A
notación ^X
"caret", etc.
Muchos shells (como ksh
o zsh
) determinarán el modo de edición predeterminado (vi o emacs) en función de los valores de VISUAL
las EDITOR
variables de entorno (en este orden de precedencia, y también manejando variantes como vim
, elvis
, xemacs
etc.).
Esto se rompió (¡muy molesto!) en mksh
, pero también sigue siendo el caso en otros pdksh
shells derivados de -.
A otros shells les gusta bash
o tcsh
están predeterminados en el emacs
modo de edición, pero eso también puede anularse desde el archivo de configuración de la biblioteca de edición de líneas.
Para elreadline
biblioteca utilizada por bash
y muchos otros programas, los archivos de configuración son ~/.inputrc
(o un archivo especificado en la INPUTRC
variable de entorno) con un respaldo /etc/inputrc
y las configuraciones son:
set editing-mode vi
set editing-mode emacs
Para la biblioteca editline
/ libedit
[1] utilizada por muchos programas BSD, el archivo de configuración suele ser~/.editrc
y la configuración es:
bind -v # for vi
bind -e # for emacs
[1] no confundir con ellibeditline
readline "work-alike" que solo proporciona un modo de edición de emacs.