Alt-Left para saltar palabras no funciona en emuladores de terminal

16

En una máquina Debian Wheezy en el trabajo anterior, me acostumbré a Alt + Izquierda y Alt + Derecha para saltar entre palabras en la línea de comando activa (en bash).

Sin embargo, dado que en casa he actualizado a Jessie (Debian 8.0, rama de prueba), esto ya no funciona: en lugar de saltar a la palabra anterior, Alt-Left imprime algo como Do [D. OTOH, si abro ssh y me conecto a mi Debian Wheezy sin cabeza, funciona perfectamente.

Además, acabo de instalar Fedora 20 en mi nuevo trabajo y aquí el comportamiento es el mismo. Esto se aplica a bash, csh y ksh (iniciado bajo env -i), así como a rxvt-unicode y xfce4-terminal, por lo que debe ser algo fuera de este nivel.

¿Dónde más en la pila debería buscar para encontrar la diferencia?

Alois Mahdal
fuente
44
Sugeriría probar alt-b y alt-f (así como el resto de las teclas de línea de lectura), ya que son más universales, y muchos programas de línea de comandos respetan los enlaces de línea de lectura.
recatada el

Respuestas:

21

Probablemente haya definido un archivo local ~/.inputrco global /etc/inputrcque se perdió en la actualización. Una solución fácil es crear un ~/.inputrcarchivo con las siguientes líneas:

## enable Alt-arrows 
"\e[1;3D": backward-word ### Alt left
"\e[1;3C": forward-word ### Alt right

Esos funcionarán con xtermy terminatory gnome-terminalpero podrían necesitar ajustes para otros terminales. Desafortunadamente, cada emulador de terminal puede usar una sintaxis diferente. Para más detalles, vea mi respuesta aquí .

terdon
fuente
Realmente quise decir Alt, y todavía funciona en la máquina remota. Ctrl + Izquierda / Derecha ya está tomada en Rxvt para mover la pestaña hacia la izquierda y hacia la derecha (Shift + Izquierda / Derecha cambiando las pestañas y Shift + Abajo abriendo una nueva).
Alois Mahdal
1
Por cierto, mientras que Ctrl + Izquierda / Derecha es común en los editores de GUI, los terminales son un mundo completamente diferente donde aún no he visto esa combinación.
Alois Mahdal
10

terdon me puso en la dirección correcta: archivo inputrc .

El culpable es que, de manera no intuitiva, readline6 en realidad usa ~ / .inputrc en lugar de / etc / inputrc, que readline (3) no enfatiza ni refuta:

El nombre de este archivo se toma del valor de la variable de entorno INPUTRC. Si esa variable no está establecida, el valor predeterminado es ~ / .inputrc. Si ese archivo no existe o no se puede leer, el valor predeterminado final es / etc / inputrc.

Así, mientras que en las dos máquinas en Debian / etc / inputrc es idéntica a la proporcionada por libreadline6 paquete (la versión es la misma que también), en la nueva máquina ~ / .inputrc existe con una sola línea: set bell-style none. Cuando se elimina este archivo, todo funciona bien (vea las notas a continuación).

No puedo revisar Fedora hasta mañana, pero supongo que es el mismo problema. Actualización: en Fedora, ~ / .inputrc no existía, aquí / etc / inputrc es simplemente diferente, por lo que puede no definir esto. Como revisión, simplemente guardé la entrada de Debian como mi ~ / .inputrc.


Notas:

El misterio de cómo se modificó durante la actualización 7> 8 sigue sin resolverse, pero en parte puede explicarse por mi mala memoria y algunos malabares involuntarios de los archivos de puntos. (Por cierto, no fue una actualización APT, sino más bien reinstalar y mover manualmente el archivo de puntos, por lo que tal vez el ~ .inputrc se interpuso de alguna manera).

Además, cuando digo OK, quiero decir que funciona con Ctrl en todas partes excepto Rxvt (OK, solo verifiqué xfce4-terminal pero sabemos que Rxvt es el rebelde habitual), donde esto se reasigna a Alt, aparentemente porque Ctrl es tomado por Rxvt Funcionalidad específica: mover la pestaña activa en la lista.

Como se menciona en la página de manual, con bash puedes usar el comando de enlace incorporado para investigar lo que tienes actualmente.

Alois Mahdal
fuente
Buena captura, +1. En realidad, es más intuitivo de lo que piensas. El comportamiento predeterminado es que los archivos de puntos específicos del usuario tengan prioridad sobre los valores predeterminados de todo el sistema. De lo contrario, los usuarios no podrían cambiar su configuración.
terdon
Consulte la respuesta actualizada para saber cómo habilitar específicamente las flechas Alt +.
terdon
2
Esto es normal, necesita $include /etc/inputrcen la parte superior ~/.inputrcsi desea leer eso también.
Chris Down
@terdon tiene mucho sentido preferir la configuración del usuario antes que en todo el sistema, pero lo que vería como más intuitivo sería que ~ / .initrc se "fusionaría" en / etc / initrc (es decir, / etc / initrc sería $included por defecto).
Alois Mahdal
1
Consulte: 1. opciones codificadas, 2. / etc / initrc, 3. ~ / .initrc --vs-- 1. opciones codificadas 2. / etc / initrc OR ~ / .initrc. La primera forma es mucho más flexible, ya que se puede extender fácilmente a un nivel inferior (por ejemplo, por proyecto, bueno, admito que este ejemplo no tiene mucho sentido con readline pero entiendes el punto).
Alois Mahdal