Buscando la solución ALT + LeftArrowKey en zsh

128

Recientemente cambié de bash a zsh, sin embargo, extraño mi Alt+ LeftArrowKeyy Alt+ RightArrowKeypara ir y venir de una palabra a la vez.

En este momento, si presiono Alt+ LeftArrowKey, retrocedo un par de letras y luego estoy atascado. No iré más hacia atrás y no volverá al final de la línea con Alt+ RightArrowKeycomo era de esperar. Ni siquiera puedo usar las teclas de flecha para ir al final de la línea, solo al penúltimo. No se pueden ingresar nuevos caracteres en la línea o, de hecho, eliminar.

¿Cómo recupero mi querido acceso directo?

Estoy en Mac OS X usando Terminal si eso es importante.

Mads Ohm Larsen
fuente

Respuestas:

241

Ejecute y catluego presione las teclas para ver los códigos que envía su acceso directo.
(Presione Ctrl+ Cpara matar el catcuando haya terminado.)
Para mí, (ubuntu, konsole, xterm) presionando Alt+ envía ^[[1;3D, así que pondría mi .zshrc

bindkey "^[[1;3C" forward-word
bindkey "^[[1;3D" backward-word

(En realidad, prefiero usar la Ctrlflecha + para mover palabra por palabra, como en un cuadro de texto normal debajo de Windows o Linux GUI).

Pregunta relacionada: Corregir la configuración de teclas (Inicio / Fin / Insertar / Eliminar) en .zshrc cuando se ejecuta Zsh en Terminator Terminal Emulator

lolesque
fuente
14
¡Tu eres mi salvador! En mi Mac "Alt + <-" dio "^ [b" y -> dio "^ [f", así que agregué estos. Funciona de maravilla. Ctrl + flechas están reservadas para cambiar entre escritorios en Mac.
Mads Ohm Larsen
Una nota es que para ctrl + <- cat ^[[Dme informaba mientras que ctrl + v informaba ^[OD. La sugerencia de Ctrl + v funcionó, pero la de gato no. Además, ctrl + v informaba lo mismo para alt + <- y alt + ->. Pude agregar estos dos mirando la salida del gato y reemplazando cualquier "[[" con "O"
Mike S
10
mi salida bajo cat es ^[^[[Cpara palabra hacia adelante y ^[^[[Dpara palabra hacia atrás, pero la actualización de estos en .zshrc no funcionó por alguna razón.
Yunti
2
@Yunti - ¡Poner bindkey "^[^[[D" backward-wordy bindkey "^[^[[C" forward-worden ~ / .zprofile funcionó para mí!
Fernando Espinosa
¡Hombre! ¡Salvó mi vida! ¡gracias por compartir!
Joao Henrique
186

Para cualquiera que use iTerm, independientemente del shell

Todas las soluciones ofrecidas aquí tienen un enfoque inverso en mi opinión. Básicamente, le está diciendo a su shell que escuche alguna secuencia de esc u otra combinación de teclas que haya configurado en su terminal, creando problemas de compatibilidad cuando cambia shells (si usa SSH en otro shell, cambie de BASH a ZSH, etc. y pierde algunas, si no todas, las combinaciones de teclas).

La mayoría de los shells tienen un conjunto de secuencias predeterminadas que vienen pre-enlazadas. Además, aunque no son 100% consistentes, están lo suficientemente cerca. Entonces, la forma más fácil que he encontrado para crear la combinación de teclas para una acción particular en el shell es decirle a su aplicación de terminal que se una a los atajos de teclado predeterminados que son consistentes en todos los shells.

Escribí una solución de compresión para hacer que su terminal responda tan cerca de las combinaciones de teclas mac nativas aquí

Abra las preferencias de iTerm + ,y navegue a la Profilespestaña ( Keysse puede usar la pestaña, pero al agregar la combinación de teclas a su perfil le permite guardar su perfil y sincronizarlo en varias computadoras) y keysla subpestaña e ingresar lo siguiente:

Mueve el cursor una palabra hacia la izquierda

+ Enviar códigos hexadecimales:0x1b 0x62

Mueve el cursor una palabra hacia la derecha

+ Enviar códigos hexadecimales:0x1b 0x66

Y eso debería darle el comportamiento deseado no solo en ZSH, sino también si ingresa SSH en un servidor que ejecuta BASH, irb / pry, nodo, etc.

Travis
fuente
1
Estaba teniendo problemas con la solución aceptada porque tenía zsh funcionando bien pero no con IRB y otras consolas. ¡Borrar configuraciones previas (en el perfil iTerm como se sugiere) funciona como un encanto!
llekn
1
La solución bindkey produciría un molesto error de sonido en Mac. Esta debería ser la forma correcta de hacerlo.
Weishi Zeng
@Lev Probable porque su shell no está asignado a la configuración predeterminada. Ejecutar bindkey | grep forward-worddebería ver "^[f" forward-worddevuelto pero si no lo hace, tiene 2 opciones. mapa a uno de los otros devueltos, o agregar "^[f" forward-worda su .zshrc.
Travis
Notaré que "^[f"parece ser el enlace más utilizado para forward-wordusar entre shells y el único configurado de manera predeterminada en mi versión de bash.
Travis
De alguna manera funcionó con el botón de comando para mí en lugar de la opción. Gracias hombre. :)
Vaibhav Jain
72

Agregar lo siguiente a ~ / .zshrc funcionó para mí en OSX Mountain Lion.

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word
Rob Sawyer
fuente
44
Esta solución desencadena una "campana" en iTerm 2 con cada uso, por lo que saltar entre palabras puede ser realmente molesto.
Matthew Morek
1
¿Alguien sabe cómo deshabilitar esto? ^ @MatthewMorek
Daniel Kobe
18
'\ e \ e' previene la campana. Mi configuración en El Capitan con iTerm 2 en modo de compatibilidad de Terminal es bindkey "\e\e[D" backward-word bindkey "\e\e[C" forward-word
Johannes Gontrum
Gracias, esto resolvió el problema en macOs Sierra. No recibo ningún sonido de campana ni en Terminal ni en iTerm2.
Raspo
¿Cómo lo configuras para que se mueva desde el final de las palabras y no desde el principio o ellas?
Mafro34
22

En MacOS High Siera 10.13.6 o Mojave 10.14.2 y usando iTerm2 con ZSH Para moverme de las palabras, tengo que poner así:

bindkey "\e\e[D" backward-word
bindkey "\e\e[C" forward-word

Otra solución no funciona bien

Vetalll
fuente
1
Esta es la única solución que también funcionó para mí. ¡Gracias! Mac OS Mojave
jamescampbell
¡Funciona también en OS Catalina!
Reed Richards
7

Aunque no responde estrictamente a su pregunta, el enlace predeterminado para forward-wordy backward-wordson alt-fresp. alt-b.

Esto funciona en todas partes, no requiere que abandones la fila de inicio y tiene una buena propiedad mnemónica (f = adelante, b = atrás), a la vez que es consistente con ctrl-fy ctrl-bsiendo forward-charactery backward-character.

¡Rasga tus flechas!

0x89
fuente
44
no funciona para mí en zsh / iterm2, imprime ƒ y ∫ (cb cf funciona).
Davorin
2

Para que funcione, utilicé esta respuesta , sin embargo, tuve que cambiar los códigos (izquierda <-> derecha)

⌥ + ← Enviar códigos hexadecimales: 0x1b 0x66
⌥ + → Enviar códigos hexadecimales: 0x1b 0x62

y agregue lo siguiente a mi ~/.zshrc

bindkey -e
bindkey "^[b" forward-word
bindkey '^[f' backward-word
iRonin
fuente
1

En Mavericks (10.9.4) el código es 1; 5 ... así que para vincular alt con flechas tengo mi .zshrc usando esto:

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

Puede usar CTRL + V y luego el comando que desea usar

en Yosemite usa la solución de Rob

ZeoS
fuente
1
bindkey "[C" forward-word bindkey "[D" backward-word
Farkie
0

En zsh, puede usar el bindkeycomando para ver métodos abreviados de teclado.

Úselo bindkeypara explorar las opciones disponibles sin combinaciones de teclas personalizadas.

Es decir, ^[b retroceder una palabra y ^[favanzar una palabra.

MCI
fuente