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

15

Uso 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 integrada Terminal.

Las combinaciones de teclas no parecen haber sido capturadas por nada antes o por Terminal, porque si paso a uno de mis servidores Linux, puedo usar Ctrl- / para saltar a la siguiente / anterior palabra en la línea de comando. Sin embargo, cuando pruebo esta combinación de teclas en bash en mi Macbook, obtengo "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?

Ryan Olson
fuente
2
Si está utilizando espacios, Ctrl + flecha cambia por defecto los espacios.
mark4o
1
Similar
pausa hasta nuevo aviso.

Respuestas:

13

OS X utiliza el enlace de teclas emacs por defecto. Esto es cierto es prácticamente todas las aplicaciones en OS X, es bastante agradable. Significa que cosas como Ca y Ce son principio / fin de línea. También obtienes el ingenioso backward-word-kill con M-backspace, oh, y kill-line 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 reenvío / contraparte están vinculadas a M- → y M- ← de forma predeterminada.

Puede alterar este comportamiento cambiando la configuración de la Biblioteca GNU Readline para su cuenta. Esto tiene lugar en su ~/.inputrcarchivo. Puede obtener una gran lista de comandos enlazables man readline, así como en la documentación en línea como esta aquí. .

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

La sintaxis de un ~/.inputrcarchivo es muy sencillo de lo que quiere 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ía salirse con la copia / etc / inputrc de su caja de linux a su OS X ~ / .inputrc)

Tim Bielawa
fuente
Una nota: si está utilizando tmux con xterm-keys mucho, también necesitará \e[1;5Cy \e[1;5Dtambién para activar forward-wordy backward-word.
Arne
2
Otra nota: si aún no funciona, puede deberse a un conflicto de acceso directo con Mission Control / Spaces. Preferencias del sistema -> Teclado -> Accesos directos -> Control de misión, Mover a la izquierda / derecha un espacio
bhh1988
No entiendo "OS X usa el enlace de teclas emacs por defecto". "Ctrl-arrow" también es un enlace de tecla emacs.
Greg
3

poner en las ~/.inputrcsiguientes líneas:

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

En estos días parece que las secuencias de escape que Ctrl-Arrows genera en el 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 puede descubrir las secuencias de escape reales escribiendo cat -vla Terminal y presionando Ctrl-Flecha izquierda o Ctrl-Flecha derecha. Aquí hay una salida de muestra para mi propia Ctrl-Flecha izquierda:

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

Para traducir a .inputrcjerga, reemplace el signo de escape ^[con \ey pegue el resultado dentro de las comillas dobles.

DomQ
fuente
0

Como @ bhh1988 mencionó, la configuración de Mission Control evita que las teclas Ctrl-Keys trabajen con las teclas de flecha bash. No quería interferir con esos atajos, así que en su lugar uso la tecla Opción (es decir, Alt). Actualmente en Mojave usando un teclado alemán (no sé si eso es relevante) puse lo siguiente .inputrcpara usar Opción-flecha izquierda y Opción-flecha derecha para moverse entre las palabras.

"\e\e[C": forward-word
"\e\e[D": backward-word
Peter Evans
fuente
0

ACTUALIZACIÓN Ene 2020

En las versiones más recientes de OSX, el shell predeterminado es zsh. Por lo tanto, el encantamiento mágico para hacer que ctrl-arrowleft y ctrl-arrowright funcionen como se espera es el siguiente:

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

(ponlo en tu .zshrc)

Fergie
fuente