iTerm 2: ¿Cómo configurar los atajos de teclado para saltar al principio / al final de la línea?


395

Puedo ver que Ctrl+ left/ rightsalta al principio / final de la línea. ¿Cómo cambiar esto a Cmd+ left/ right arrow?

Para que Alt+ left/ right arrowfuncione correctamente para el salto de palabras, sigue este artículo .



1
Si desea que esos accesos directos también funcionen en VIM, consulte esta respuesta: stackoverflow.com/a/9611698/991068
Razvan Grigore

Respuestas:


736

Agregue en iTerm2 las siguientes teclas de acceso directo de perfil

FOR  ACTION         SEND
⌘←  "SEND HEX CODE"      0x01 
⌘→  "SEND HEX CODE"      0x05
⌥←  "SEND ESC SEQ"  b
⌥→  "SEND ESC SEQ"  f

Aquí hay un visual para aquellos que lo necesitan

iTerm add key visual


3
¿Sabes cuál es el código / secuencia para Command + Delete? (borrar el aviso)
Steven Lu

10
Respondí mi primer comentario en otra parte, básicamente el código hexadecimal 0x15 da Ctrl + U, que borra la línea. Sin embargo, encuentro 0x01 Ctrl + A para interferir con el uso de Tmux. Por lo tanto, pretendo asignarlo a la tecla Inicio (la misma funcionalidad que Fn + Izquierda en un teclado Mac).
Steven Lu

77
La secuencia de escape para Home es [1 ~ y la secuencia de escape para End es [4 ~
Steven Lu

3
Funciona como un encanto, increíble!
Juto

25
El enlace correcto es ⌘← "SEND ESC SEQ" OHpara Inicio y ⌘→ "SEND ESC SEQ" OFpara Fin (esos son mayúsculas y no ceros). Esto simula presionar las teclas Inicio y Fin, y como tal funcionará en bash, vim, etc.
Timothy Zorn

433

Para saltar entre las palabras y el inicio / final de las líneas en iTerm2, elija una de las dos soluciones a continuación.

1. Solución simple (recomendada)

  1. Preferencias abiertas
  2. Haga clic en la pestaña "Perfil"
  3. Seleccione un perfil en la lista de la izquierda (por ejemplo, "Predeterminado") y haga clic en la pestaña "Claves"
  4. Haga clic en la ventana desplegable "Presets" y seleccione "Edición de texto natural"

ingrese la descripción de la imagen aquí


2. Asignación de teclas manualmente (Avanzado)

Si no desea utilizar el ajuste predeterminado "Edición de texto natural" mencionado anteriormente, puede asignar las teclas que necesita manualmente:

  1. Preferencias abiertas
  2. Haga clic en la pestaña "Llaves"
  3. Haga clic en el [+]icono

Ahora puede agregar los siguientes métodos abreviados de teclado:

Mueve el cursor una palabra hacia la izquierda

  • Atajo de teclado: +
  • Acción: Enviar código hexadecimal
  • Código: 0x1b 0x62

ingrese la descripción de la imagen aquí

Mueve el cursor una palabra hacia la derecha

  • Combinación de teclado: +
  • Acción: Enviar código hexadecimal
  • Código: 0x1b 0x66

Mueve el cursor al comienzo de la línea

  • Combinación de teclado: +
  • Acción: Enviar código hexadecimal
  • Código: 0x01

Mueve el cursor al final de la línea

  • Combinación de teclado: +
  • Acción: Enviar código hexadecimal
  • Código: 0x05

Eliminar palabra

  • Combinación de teclado: +←Delete
  • Acción: Enviar código hexadecimal
  • Código: 0x1b 0x08

Eliminar linea

  • Combinación de teclado: +←Delete
  • Acción: Enviar código hexadecimal
  • Código: 0x15

Deshacer

  • Combinación de teclado: +z
  • Acción: Enviar código hexadecimal
  • Código: 0x1f

No olvide eliminar los enlaces anteriores :

  • Abra la pestaña "Perfiles"
  • Haga clic en la subpestaña "Teclas"
  • Eliminar las asignaciones para combinaciones de teclas + y +

2
Esto funcionó bien para mí en iTerm2 y fue muy fácil de seguir, ¡gracias!
Natetronn

3
Solo aclarando ¿qué hacen los enlaces originales para ⌥ ←? Lo veo Says send Hex Codes: 0x1b 0x1b 0x5b 0x44. Sería bueno saber en caso de que la gente no quisiera eliminar esto.
agosto

55
Saltar al principio y al final de la línea no funcionó para mí usando zsh. El uso de "Código hexadecimal" "0x01" / "0x05", como lo sugiere la respuesta superior, funcionó para mí.
Voltear el

2
Saltar al principio y al final de la línea tampoco funcionó para mí. La mejor respuesta funcionó.
hisabimbola

3
¿ITerm tiene una manera de agruparlos en un preajuste que podamos cargar? Parece molesto escribir manualmente, pero esto funcionó para mí y fue increíble. Gracias a lto!
agosto

259

Veo que ya hay muchas buenas respuestas, pero esto debería proporcionar la funcionalidad más cercana a OSX nativa posible en más que solo su shell. Verifiqué que esto funciona en sesiones ZSH, Bash, nodo, python -i, iex e irb / pry (usando gema rb-readline para readline, pero debería funcionar para todos).

Abra las preferencias de iTerm + ,y navegue a la Profilespestaña ( Keysse puede usar la pestaña, pero 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:

Eliminar todos los caracteres que quedan del cursor

+ ←DeleteEnviar códigos hexadecimales:

0x15Más compatible, pero la funcionalidad a veces es eliminar toda la línea en lugar de solo los caracteres a la izquierda del cursor. Yo personalmente uso esto y luego sobrescribo mi tecla de enlace zsh para ^Ueliminar solo las cosas a la izquierda del cursor (ver más abajo).

o

0x18 0x7fMenos compatible, no funciona en el nodo y no funcionará en zsh de forma predeterminada, consulte a continuación para corregir zsh (bash / irb / pry debería estar bien), realiza la funcionalidad deseada cuando funciona.

Eliminar todos los caracteres a la derecha del cursor

+ fn+ ←Deleteo + Delete→Enviar códigos hexadecimales:0x0b

Eliminar una palabra a la izquierda del cursor

+ ←DeleteEnviar códigos hexadecimales:

0x1b 0x08 Rompe el IEX de Elixir, parece funcionar bien en cualquier otro lugar

o

0x17 Funciona en todas partes, pero no se detiene en los saltos de palabras normales en IRB y en su lugar se eliminará hasta que vea un espacio literal.

Eliminar una palabra a la derecha del cursor

+ fn←Deleteo + Delete→Enviar códigos hexadecimales:0x1b 0x64

Mueve el cursor al frente de la línea

+ Enviar códigos hexadecimales:0x01

Mueve el cursor al final de la línea

+ Enviar códigos hexadecimales:0x05

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

Deshacer

+ zEnviar códigos hexadecimales:0x1f

Rehacer normalmente no está limitado en bash, zsh o readline, por lo que podemos configurarlo en un código hexadecimal no utilizado que luego podemos arreglar en zsh

+ + Zo + yEnviar códigos hexadecimales:0x18 0x1f

Ahora cómo arreglar cualquier que no funcione

Para zsh, puede configurar el enlace para los + ←Deletey + + Z/ + aún no funcionales yejecutando:

# changes hex 0x15 to delete everything to the left of the cursor,
# rather than the whole line
$ echo 'bindkey "^U" backward-kill-line' >> ~/.zshrc

# binds hex 0x18 0x7f with deleting everything to the left of the cursor
$ echo 'bindkey "^X\\x7f" backward-kill-line' >> ~/.zshrc

# adds redo
$ echo 'bindkey "^X^_" redo' >> ~/.zshrc

# reload your .zshrc for changes to take effect
$ source ~/.zshrc

No puedo encontrar una solución para agregar rehacer en bash o readline, por lo que si alguien conoce una solución para cualquiera de esos, comente a continuación e intentaré agregarlos.

Para cualquiera que busque la tabla de búsqueda sobre cómo convertir secuencias de teclas a hexadecimales, encuentro esta tabla muy útil.


2
¡Eso es realmente útil, hace una gran diferencia! Me gustaría señalar que algunas personas pueden confundirse con el $frente de echo(¿solo eliminarlo?). Aparte de eso, es perfecto. Gracias.
edmundo

1
@ Christopher Por lo tanto, parece que la combinación de teclas está allí como debería estar. O cometió un error al agregar los valores hexadecimales o se sobrescribió la combinación de teclas para la palabra hacia atrás. Corre bindkey | grep "\^\[b"y eso te dirá si algo más lo sobrescribe después de que se haya configurado. Solo debería regresar #=> "^[b" backward-word. Si se sobrescribe, tendrá que encontrar dónde se sobrescribe y eliminarlo. Si eso no es posible, puede ejecutarlo echo 'bindkey "^[b" backward-word' >> ~/.zshrc, lo agregará a la última línea de su .zshrc, luego reinicie iTerm y debería funcionar
Travis

2
@Christophe revisa la keyspestaña en las preferencias de iTerm para ver si también está asignando + a algo. Si es así, retíralo. Puede probar si bestá funcionando correctamente presionando rápidamente la escliberación y luego presionando b. Eso debería saltar una palabra a la izquierda. Alternativamente, puede asignar + a hexadecimal 0x1b 0x42 o 0x1b 0x5b 0x31 0x3b 0x35 0x44 . Verifiqué que ambos funcionen para mí. Sin embargo, realmente creo que se ha sobrescrito + en iTerm, ya sea en su profile keyspestaña o keyspestaña.
Travis

3
¡Asombroso! Acabo de enterarme de los enlaces Deshacer más Rehacer desde aquí.
ecbrodie

3
Lo hice manualmente y pensé por qué no puedo importar un perfil para hacer esto. Luego creé GabLeRoux / iterm2-macos-dynamic-profile basado en estas instrucciones. Funciona perfectamente, gracias 🍻
GabLeRoux

48

Siga el tutorial que enumeró anteriormente para configurar sus preferencias clave en iterm2 .

  1. Crear una nueva clave de acceso directo
  2. Elija "Enviar secuencia de escape" como acción
  3. Luego, para establecer cmd-left , en el texto debajo de eso:
    • Ingrese [Hpara el inicio de línea
      O
    • Ingrese [Fpara el final de línea

1
F dice solo una palabra dentro de mi iterm2
Matthias

1
ITerm => Preferencias => Teclas
pfrank

¡Me gusta esto! Las otras soluciones no me funcionaron. Pasé horas frustrado porque no podía usar ctrl + a y ctrl + e en iterm2. Pero no quería renunciar al pescado por ello. Esto funciona totalmente gracias!
VUELO

Otras soluciones tampoco funcionaron para mí, pero esta sí.
Braham Snyder

42

En iTerm 3.0.12 puede cambiar a Natural Text Editingpreestablecido:

ingrese la descripción de la imagen aquí

iTerm → Preferencias → Perfiles → Teclas

Advertencia Como es un valor predeterminado, puede anular las teclas que ha enlazado anteriormente. Por lo tanto, es mejor guardar las combinaciones de teclas actuales antes de aplicar un valor predeterminado.


2
¿Podrías elaborar más tu respuesta? Como en, ¿qué incluye ese preajuste y podría sobrescribir?
Carles Alcolea

Gracias por la respuesta. También es probable que sea una mejor práctica aplicar esto a su propio perfil personalizado de esa manera, no está atormentando los valores predeterminados y puede alternar el perfil como un "modo" de edición de texto natural
agosto

29

Para una referencia rápida de cualquiera que quiera ir al final de la línea o al inicio de la línea en iTerm2, el enlace anterior http://hackaddict.blogspot.com/2007/07/skip-to-next-or-previous-word- in-iterm.html señala que en iTerm2:

  • Ctrl+ A, salta al inicio de la línea, mientras que
  • Ctrl+ E, salta al final de la línea.

¿Por qué esta respuesta no está en la parte superior?
Gangadhar JANNU

1
@GangadharJannu: totalmente de acuerdo. Va directo a los ans. Debería estar en la cima.
Catbuilts

10

Utilicé la respuesta de Travis y creé un perfil dinámico que puede importar según sus instrucciones.

GabLeRoux / iterm2-macos-dynamic-profile

Las instrucciones están en el archivo Léame y es mucho más rápido importar esto que agregarlas todas manualmente. Respondí esto según la solicitud de @ gooli porque estaba oculto en un comentario. Espero que disfrutes esto 🍻


2
¡Volví aquí un año después y estoy muy feliz de encontrar esto!
elifiner

9

Solo para ayudar a cualquiera que esté teniendo el mismo problema pero específicamente usando el shell Zsh con iTerm 2. Resulta que Zsh no lee /etc/inputrccorrectamente , y por lo tanto no comprende las teclas que configura a través de las preferencias!

Para solucionar esto, debe agregar algunas asociaciones de teclas a su .zshrcarchivo, como:

# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line

Tenga en cuenta las barras invertidas en el ejemplo anterior antes de la "e", el artículo vinculado no las muestra, así que agréguelas a su .zshrcarchivo al agregar enlaces.


4

Los viejos enlaces de emacs aún pueden funcionar en iterm2 y en la terminal os x:

Preferencias -> Perfiles -> Teclas (subpestaña en perfiles)

  • Conjunto Left/Right option <kbd>⌥</kbd> key acts as +Esc(similar en terminal os x)

Esto debería habilitar alt- fy alt- bpara mover palabras por palabras. (Todavía ctrl- ay ctrl-e siempre trabajar como de costumbre)

Si se establece como metaesos enlaces antiguos funcionarán mientras algunos enlaces iterm2 no estén disponibles.


2

Como se explica aquí , puede hacerlo con unos simples pasos:

Por defecto, los saltos de palabras (opción + → o ←) y las eliminaciones de palabras (opción + retroceso) no funcionan. Para habilitarlos, vaya a "iTerm → Preferencias → Perfiles → Teclas → Cargar preajuste ... → Edición de texto natural → Explosiones de Boom! Head"


2

Las únicas cosas que funcionan para moverse al principio y al final de la línea son

⌘← "SEND ESC SEQ" OH- para ir al principio de la línea
⌘→ "SEND ESC SEQ" OF- para ir al final de la línea


1

bind -p mostrará una lista de claves escapadas en su shell, que podría ayudarlo a darle más ideas / términos de búsqueda.


55
bind -psolo funciona en shells Bourne (bash, sh) para zsh, csh tcsh, use bindkey.
Travis


0

Para mí, la siguiente combinación funcionó:
| Key Action Esc+ End result | |-----------------------------------------------------| | Send Escape Sequence a Send ^[ a | | Send Escape Sequence e Send ^[ e |

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.