¿Qué configuración controla el movimiento del cursor en la línea de comando?

¿Qué configuración controla el movimiento del cursor en la línea de comando?

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 vimodo de edición (el único especificado por elestándar).

Cuando no está en emacsmodo de edición, Ctrl-A y Ctrl-E no tienen ningún significado especial. Si la configuración echoy echoctlstty/termios están activadas, todas las teclas de control que no se manejan especialmente se mostrarán en la ^Anotación ^X"caret", etc.

Muchos shells (como ksho zsh) determinarán el modo de edición predeterminado (vi o emacs) en función de los valores de VISUALlas EDITORvariables de entorno (en este orden de precedencia, y también manejando variantes como vim, elvis, xemacsetc.).

Esto se rompió (¡muy molesto!) en mksh, pero también sigue siendo el caso en otros pdkshshells derivados de -.

A otros shells les gusta basho tcshestán predeterminados en el emacsmodo 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 elreadlinebiblioteca utilizada por bashy muchos otros programas, los archivos de configuración son ~/.inputrc(o un archivo especificado en la INPUTRCvariable de entorno) con un respaldo /etc/inputrcy 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~/.editrcy la configuración es:

bind -v  # for vi
bind -e  # for emacs

[1] no confundir con ellibeditlinereadline "work-alike" que solo proporciona un modo de edición de emacs.

información relacionada