ALT + flecha moviéndose entre palabras en zsh e iTerm2

19

Inicié sesión en uno de los servidores del proveedor de alojamiento y noté que ALT + izquierda y ALT + derecha se movían entre palabras en un indicador de shell en la pantalla GNU.

¿Qué tipo de combinaciones de teclas necesito configurar y dónde obtener este comportamiento para mi OS X zsh local ejecutándose en iTerm2?

Mikko Ohtamaa
fuente
Las personas interesadas en esta pregunta también pueden estar interesadas en saber que las palabras zsh no son palabras bash. FOO=BARes una palabra para zsh y 2 palabras para bash. Del mismo modo, si establece el cursor al final de foo --bary hace alt + retroceso, en bash tendrá foo --y en zsh tendrá foo . Zsh agrega muchas características a bash, pero también tiene muchos valores predeterminados locos para anular.
weberc2

Respuestas:

28

Encontré la solución aquí: https://coderwall.com/p/h6yfda . Copiará las partes más importantes, en caso de que el enlace se caiga.

  1. Vaya a Preferencias, Perfil, Claves.
  2. Establezca la tecla ⌥ izquierda para actuar como un personaje de escape.
  3. Localice el acceso directo actual para ⌥ ← o cree uno nuevo, con la siguiente configuración:
    • Atajo de teclado: ⌥ ←
    • Acción: Enviar secuencia de escape
    • Esc +: b
  4. repita para el atajo de teclado ⌥ → con la siguiente configuración:
    • Atajo de teclado: ⌥ →
    • Acción: Enviar secuencia de escape
    • Esc +: f
Willington Vega
fuente
1
Vale la pena mencionar que es específico de un emulador de terminal en particular, no de zsh en general.
Hola Angel
6

Estás buscando las palabras clave backward-wordy forward-word. Entonces, si está en un shell donde las combinaciones de teclas no funcionan, intente bindkey -L | grep backward-wordverificar si están configuradas. Hay más información sobre esto en zshzle (1) .

Puede configurar manualmente la combinación de teclas escribiendo algo como esto:

bindkey ' Ctrl+ v Alt+ Right' palabra adelante

bindkey ' Ctrl+ v Alt+ Left' palabra hacia atrás

También tuve algunos problemas con las combinaciones de teclas y el problema era casi siempre que la tecla Opción / Alt enviaba algo diferente al Meta / Escape esperado.

Sebastian Stumpf
fuente
También puedes usar emacs-forward-wordy emacs-backward-word. La diferencia es que saltas hacia el final de la palabra y hacia atrás al principio de la palabra en lugar de saltar siempre al principio de la palabra.
Aalex Gabi
Esta es la solución más robusta y limpia. Se puede adaptar a diferentes tipos de mapeo de teclas y / o todo tipo de combinación ssh-tmux-zsh. Otras soluciones que involucran una secuencia de escape codificada solo resuelven algunos de los casos en algún sistema particular.
HKTonyLee
3

No puedo hablar por iTerm, pero estas son las combinaciones de teclas que utilicé para resolver este problema en el Terminal GNOME, en Fedora 19, ejecutando ZSH 5.0.7 con Oh-my-zsh:

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

donde \e== La secuencia de teclas de escape (como se documenta en la sección 4.1.1 )

y [== O(O mayúscula; como se documenta en la sección 4.2.1 ), en algunos casos. Por ejemplo, bajo tmuxesta sustitución es necesaria para mí, sin embargo, sin tmuxella se requiere que no se realice ninguna sustitución y [==[

Los códigos clave para una secuencia se pueden obtener usando caty presionando la secuencia deseada. Por ejemplo, los resultados de presionar <Alt+Right>deben interpretarse así:

$ cat
^[[1;3C

^[== \e== La secuencia de teclas de escape

[== [sin tmuxOR [== O(o mayúscula) contmux

1;3 == No estoy seguro de esto, pero lógicamente debería significar <Alt>

C == La tecla de flecha derecha

Luego, esta secuencia se da bindkeyen el ~/.zshrcarchivo para persistencia, como primer argumento, y está vinculada , lo que significa que la pulsación de tecla en el argumento uno ejecutará un comando de editor particular (o widget en términos zsh), al widget, que en el primer línea del ejemplo anterior es forward-word.

Se ~/.zshrcdebe volver a obtener después de que estos dos comandos se agreguen con:

$ source ~/.zshrc

Ahora, una molestia en mi sistema es que esta combinación en particular provocó que el emulador de terminal emitiera un pitido cada vez que se emitió el comando, esto lo solucioné desactivando el

'Edit'->'Profile Preferences'->'Terminal Bell' caja.

rivanov
fuente
1

Lo que funcionó mejor para mí en lo que respecta a hacer que la navegación de línea de comandos de iTerm2 sea más intuitiva para mí (soy un adulto joven que no creció en una línea de comandos, pero pasé mucho tiempo en editores de texto e IDE) fue a:

  • Vaya a Preferencias -> Perfil -> Teclas
  • En la lista de Asignaciones de teclas hay un cuadro para agregar / eliminar o cargar Presets (cuadro combinado)
  • Seleccione la Natural Text Editingopción en el menú desplegable Presets.

Esto predetermina las claves del editor a una disposición más estándar sin que tenga que modificar cada opción individualmente.

loganjones16
fuente
0

Le sugiero que use zkbdpara configurar la combinación de teclas. Lo uso y Alt+ Left/ Alt+ Rightfunciona bien en iTerm2. Ver zshcontrib(1)para más detalles sobre zkbd.

Daniel Serodio
fuente