¿Cómo puedo obtener control + flecha izquierda para retroceder una palabra en iTerm2?

114

Estaba leyendo el manual de Linux y noté que decía que podía usar control + izquierda y control + derecha para avanzar y retroceder palabras en el terminal durante la edición.

"Al presionar Ctrl más la tecla de flecha izquierda o derecha se mueve hacia atrás o hacia adelante una palabra a la vez, al igual que presionar Esc y luego B o F."

En OS X control+lefty control+rightnormalmente espacios de control. He desactivado esos. También intenté usar el panel de preferencias para configurar los atajos de teclado:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Sin embargo, esto no funciona y causa este error:

ingrese la descripción de la imagen aquí

Además, si estoy en iTerm y uso alt+escapeB o F, el personaje se mueve hacia adelante y hacia atrás. Esto sucedía antes de que cualquiera de mis cambios de configuración. Pero realmente me gustaría poder usar control + las teclas de flecha.

cwd
fuente
Por cierto, una forma más parsimoniosa de lograr esto podría ser simplemente asignar comando + izquierda y comando + derecha en lugar de ctrl + izquierda y ctrl + derecha. No necesitaba deshabilitar nada en todo el sistema para lograr esto.
Doctor Mohawk

Respuestas:

135

golpetazo

Simplemente agregue lo siguiente a ~/.inputrc:

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

Consulte esta publicación de Wiki archivada para obtener más explicaciones. Si desea usar la alttecla en su lugar para el movimiento de palabra a palabra (como el comportamiento predeterminado de OS X), use:

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

zsh

zsh por defecto no usa la readlinebiblioteca y por lo tanto no leerá ~/.inputrc. Para obtener la misma funcionalidad, puede agregar lo siguiente a su ~/.zshrc- esto nuevamente usaría la altclave:

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

Consulte esta documentación para obtener más información sobre el editor de línea zsh incorporado (zle).


¿Por qué es esto? Ha configurado su perfil para usar los valores predeterminados de Xterm:

ingrese la descripción de la imagen aquí

Es por eso que necesitará "atrapar" esta secuencia y decir readlinequé hacer.


Si lo anterior aún no funciona y está utilizando OS X 10.9 (Mavericks) o algo por el estilo, es probable que necesite deshabilitar los accesos directos globales de Mission Control que evitan que las teclas de control + flecha lleguen a iTerm, incluso si Mission Control está deshabilitado. Puede hacerlo desde Preferencias del sistema → Teclado → Accesos directos → Control de misión :

preferencias de teclado de control de misión

slhck
fuente
44
Intento seguir las instrucciones para que las teclas alt + left y alt + right funcionen. Agregué las dos líneas a mi archivo .inputrc, pero lo único que sucede cuando presiono las teclas es que se imprime una "D" o una "C" en el shell. Estoy usando iTerm2 con zsh shell. ¿Algunas ideas?
Flo
1
@Flo Intente agregar las líneas bindkey -e, bindkey '^[[1;9C' forward-wordy bindkey '^[[1;9D' backward-worden su ~/.zshrclugar. IIRC zsh no leerá .inputrc, o al menos me funciona de esta manera.
slhck
2
No funciona para mí con ctrl-left / right + bash, pero funciona bien si lo configuro para alt-left / right.
Dalin
3
Se agregó una edición sobre los métodos abreviados de control de misión para evitar que todo esto funcione de la manera más opaca. Espero que salve a alguien de pasar por lo mismo que acabo de hacer ...
rubyruy
12
Para OSX + zsh + iTerm2 + ctrl-left / right use lo siguiente:bindkey -e; bindkey '\e\e[C' forward-word; bindkey '\e\e[D' backward-word
Artur Bodera
45

Solución de trabajo para zsh. Simple, directo, listo para usar.

  1. Ir: ⌘, Preferences → Profiles → Keys → Keyboard Behavior

  2. Carga preestablecida: Natural Text Editing

Cargar Preset "Edición de texto natural"

Feliz torturador
fuente
Gracias @Happy Torturer, creo que es la mejor respuesta principalmente porque no tengo ese problema en Terminal.app simple, así que no quiero modificar bash / zsh, solo quiero trabajar todo como en Terminal.app.
galuszkak
Esto esto esto. ¡Muchas gracias por esta solución! He pasado por este proceso enloquecedor con cada Mac que obtengo. Ahora sé la forma más sencilla de hacer que esto suceda. ¡Gracias!
vernonk
8

Lo arreglé de esta manera:

En el menú superior; ir

Profiles 
-> Open profiles... 
-> Edit profiles... (button) 
-> Keys (tab) 
-> Load Preset... (dropdown) 
->  Choose "Natural text editing". Done! :-)
rassom
fuente
todo lo que tengo bajo ese preajuste es "Valores predeterminados de fábrica"
MaylorTaylor
7

Usé un enfoque diferente. Usando BetterTouchTool programé un atajo de teclado personalizado para iTerm2. Cuando presiono alt-left en iTerm2, envía el atajo de teclado ctrl-left con la acción "Enviar atajo de teclado a una aplicación específica". La aplicación es iTerm2. Hice lo mismo para alt-right asignado a ctrl-right.

El efecto es que presionar alt-left o alt-right en iTerm envía un ctrl-left o ctrl-right directamente a iTerm2, omitiendo el acceso directo habitual en todo el sistema para mover un escritorio hacia la izquierda o la derecha. De esta manera, obtengo el comportamiento típico de mac en iTerm2, en sesiones de terminal local, pero también en sesiones remotas SSH y puedo usar el estándar ctrl-left / ctrl-right para moverme a diferentes escritorios. Lo escribí aquí arriba:

http://www.callum-macdonald.com/2013/04/17/ctrl-left-and-ctrl-right-on-iterm2/

chmac
fuente
2
BetterTouchTool no es de código abierto y bien podría estar haciendo cosas que desearía que no fuera así. El tipo dice que es un estudiante, pero que bien podría ser una agencia de tres letras.
revacunar el
7

En realidad, encontré que la solución más fácil era ir a la configuración de mi perfil (que se encuentra en Perfiles / Teclas), eliminando los atajos de perfil ofensivos (ya que el perfil anula global en iTerm), en mi caso alt + izquierda y alt + derecha y luego global ¡los atajos funcionaron perfectamente para mí!

Además, si está utilizando OS X, probablemente sea mejor seguir atajos de todo el sistema, es decir, usar alt + left y alt + right en su lugar para este propósito, tener un comportamiento diferente en la terminal puede causar un dolor eventualmente.

Además de la solución de chmac para usar Better Touch Tool, fue una manera elegante de cambiar el comportamiento de control + flecha solo en iterm.

nayyarv
fuente
De hecho, esta es la mejor solución. Es confuso ya que la mayoría de nosotros vamos a la Keyspestaña. En cambio, tenemos que ir a la Profilespestaña -> Un perfil (por ejemplo, predeterminado) -> teclas.
Paschalis el
Esta es definitivamente la solución más segura y fácil.
revacunar el
2

Esta publicación enseña este y otros atajos como ⌥ ← Eliminar para eliminar una palabra:

http://elweb.co/making-iterm-2-work-with-normal-mac-osx-keyboard-shortcuts/

Seralto
fuente
En realidad, esto no responde la pregunta, que se trata de usar <ctrl> <left>
DavidPostill
Todo lo que tiene que hacer es usar el acceso directo que se ajuste a sus necesidades. "<ctrl> <izquierda>" o lo que quieras.
Seralto
1
Por lo tanto, cite las partes esenciales de la respuesta en los enlaces de referencia, ya que la respuesta puede volverse inválida si las páginas enlazadas cambian.
DavidPostill
1

Debe ir a la Profilespestaña y eliminar la asignación para alt+ lefty alt+ rightya que, de forma predeterminada, genera algunos valores hexadecimales.

Sid
fuente
¡Esto lo hizo por mí!
Philip