¿Por qué Ctrl-Arrow no funciona en bash en OS X?

¿Por qué Ctrl-Arrow no funciona en bash en OS X?

Utilizo Ctrl- y Ctrl- en todos los sistemas Linux en los que trabajo, pero estas combinaciones de teclas no funcionan en bash en mi Macbook Pro. Está ejecutando Snow Leopard y estoy usando la aplicación Terminal integrada.

Las combinaciones de teclas no parecen ser capturadas por nada antes ni por Terminal, porque si me dirijo a uno de mis servidores Linux, puedo usar Ctrl- / para saltar a la palabra siguiente/anterior en la línea de comando. Sin embargo, cuando intento esta combinación de teclas en bash en mi Macbook, aparece "C" para la flecha derecha y "D" para la flecha izquierda.

¿Alguna idea sobre cómo puedo hacer que estas claves funcionen en Darwin Bash?

Respuesta1

OS X usa el enlace de teclas de emacs por defecto. Esto es cierto en prácticamente todas las aplicaciones de OS X, es bastante bueno. Significa que cosas como Ca y Ce son el principio o el final de la línea. También obtienes la ingeniosa función de matar palabras hacia atrás con M-retroceso, oh, y matar la línea con Ck.

Esto debería significar que en su terminal las palabras hacia adelante/hacia atrás están vinculadas a Mf y Mb, respectivamente (M = Meta = alt/opción), sin embargo, ese no es el caso. En OS X, las palabras de avance/retroceso están vinculadas a M-→ y M-← de forma predeterminada.

Puede modificar este comportamiento cambiando la forma en que está configurada la biblioteca GNU Readline para su cuenta. Esto tiene lugar en su ~/.inputrcexpediente. Puede obtener una gran lista de comandos enlazables y man readlineen la documentación en línea comoesto aqui..

Entonces, para responder a su pregunta, desea reasignar lo que hace Readline cuando ve C-→ y C-← para hacer lo que hace en su servidor Linux.

La sintaxis de un ~/.inputrcarchivo es bastante simple para lo que quieres hacer: key-sequence: action.

Esto debería ser lo que necesita para obtener el comportamiento deseado:

"\e[5C": forward-word
"\e[5D": backward-word

Aquí hay otra página.con enlaces útiles adicionales.

(Probablemente podrías salirte con la tuya copiando /etc/inputrc desde tu máquina Linux a tu OS X ~/.inputrc)

Respuesta2

ACTUALIZACIÓN enero 2020

En las versiones más recientes de OSX, el shell predeterminado es zsh. Por lo tanto, el encantamiento mágico para que Ctrl-Flecha Izquierda y Ctrl-Flecha Derecha funcionen como se esperaba es el siguiente:

bindkey '^[[1;5D' backward-word
bindkey '^[[1;5C' forward-word

(ponlo en tu .zshrc)

Respuesta3

poner en ~/.inputrclas siguientes lineas:

"\e[5C": forward-word
"\e[5D": backward-word

Respuesta4

Estos días parece que las secuencias de escape que Ctrl- Arrowssalida en la terminal han cambiado. Esto es lo que funciona para mí a partir de hoy (finales de 2018):

"\e[1;5C": forward-word
"\e[1;5D": backward-word

Nota: siempre puedes descubrir las secuencias de escape reales escribiendo cat -ven la Terminal y presionando Ctrl- Left Arrowo Ctrl- Right Arrow. Aquí hay un resultado de muestra para mi propio Ctrl-Flecha izquierda:

^[[1;5C
^[[1;5C

Para traducir a .inputrcla jerga, reemplace el signo de escape ^[con \ey pegue el resultado entre comillas dobles.

información relacionada