¿Se pueden asignar las teclas de inicio y fin cuando se usa Terminal?

76

Las teclas homey enden un MacBook Pro se pueden emular con fn + flecha izquierda o fn + flecha derecha. O cuando se cambian ciertas configuraciones, con la tecla Comando (Apple) en lugar de fn.

Ninguno de estos trabajos en la Terminal.

Como frecuentemente necesito ir al principio o al final de la línea y también me gustaría saltar hacia adelante o hacia atrás por palabra.

¿Cómo puedo saltar en una línea en la Terminal?

at01
fuente

Respuestas:

64

Use control+ apara INICIO y control+ epara FIN en la Terminal.

También use esc+ fpara moverse al comienzo de la siguiente palabra y esc+ bpara moverse al comienzo de la palabra actual . (Debes tener cuidado con el actual y el próximo)

Am1rr3zA
fuente
2
¡Perfecto! ¿Qué hay de saltar por palabra? (Ctrl-izquierda y Ctrl-derecha en Windows)
at01
@ at01 Actualicé mi respuesta.
Am1rr3zA
41
¿Quién diseñó las llaves de la Terminal?!?!
at01
44
Prefiero usar la opción + flecha izquierda y la opción + flecha derecha para pasar al comienzo de las palabras
Allan Jikamu
2
Ctrl + a y Ctrl + e funcionaron para mí, pero sin recurrir a reasignar las pulsaciones del teclado como lo proponen tantos aquí, prefiero la alternativa de @ AlphaFighter de Shift + Home y Shift + End (Shift + Fn + flecha izquierda y Shift + Fn + flecha derecha en el teclado MacBook Pro) para el principio y el final de la línea.
John Rix
70

Para responder a la pregunta sobre cómo obtener el principio o el final de la línea, parece que, por defecto, Terminal le asigna estas teclas:

  • shift + home → comienzo de línea, equivalente a la tecla "home" en terminales normales
  • shift + end → end of line, equivalente a la tecla "end" en terminales normales

Si desea que el inicio y el final funcionen de la manera "normal" (y no requiera turno), vaya a [Menú terminal] → Preferencias → pestaña Perfiles (o configuraciones en algunas versiones de OS X) → subpestaña Teclado.

Luego modifique / agregue estas claves para que sean las siguientes "enviar cadena al shell"

  • casa: \033[H
  • fin: \033[F

Puede obtener la \033pieza presionando la tecla de escape dentro de la entrada de diálogo de edición, si necesita agregarla.

Luego, el inicio y el final volverán a funcionar normalmente (phew).

También tenga en cuenta que "alt + ←" y "alt + →" de forma predeterminada en el mapa de terminales a la palabra izquierda y la palabra derecha, otro combo útil para recordar.

En versiones posteriores de Mac OS X, si la pantalla del terminal se mueve hacia arriba o hacia abajo cuando presiona la tecla de inicio / finalización, es posible que deba configurar la tecla de inicio \033[1~y la tecla de finalización \033[4~para obtener los resultados que desea (no es necesario cambiar) .

Siéntase libre de modificar esta respuesta para agregar enlaces de teclas más útiles, ya que es una wiki comunitaria.

rogerdpack
fuente
55
\ 033 [H y \ 033 [F para el hogar y el final no me funcionaron; sin embargo, \ 001 y \ 005 lo hicieron. Puede ingresar estos códigos en el cuadro de diálogo de edición presionando ctrl-A y ctrl-E. Estoy usando zsh, no estoy seguro de si eso hace alguna diferencia.
JW.
shift + home / end hizo el trabajo
isaias-b
1
He estado tratando de resolver esto por un tiempo, ¡esto me salvó!
Paul Gray
Esto funciona muy bien cuando estás en la aplicación de terminal real localmente. Sin embargo, cuando ingresa a una máquina macOS, parece que ya no funciona. ¡¿Cómo evitar esto?!
Ahi Tuna
2
@AhiTuna SSH es solo una conexión a una sesión de terminal, no una conexión a un emulador de terminal. Las opciones de entrada siempre están definidas por el emulador de terminal que esté utilizando.
Bachsau
39

Parece que está buscando ayuda para usar readline y bash, aquí hay una lista de locos de teclado modificada de: http://www.math.utah.edu/docs/info/features_7.html#SEC45

Ctrla Moverse al inicio de la línea.
Ctrle Moverse al final de la línea.
Escf Avanzar una palabra.
Escb Retroceder una palabra.
Ctrll Despeje la pantalla, reimprimiendo la línea actual en la parte superior.

Ctrlk Mata el texto desde la posición actual del cursor hasta el final de la línea.
Escd Matar desde el cursor hasta el final de la palabra actual, o si está entre palabras, hasta el final de la siguiente palabra.
EscDel Elimine desde el cursor el inicio de la palabra anterior, o si está entre palabras, hasta el inicio de la palabra anterior.
Ctrlw Mata desde el cursor al espacio en blanco anterior. Esto es diferente a EscDelCtrla porque los límites de las palabras difieren.

Ctrld Elimina el carácter debajo del cursor.
Ctrl_ Deshacer lo último que hiciste. Puede deshacer todo el camino de regreso a una línea vacía.

Y aquí está cómo volver a tirar el texto a la línea. Yanking significa copiar el último texto eliminado del búfer de eliminación.

Ctrly Yank el texto eliminado más recientemente en el búfer en el cursor.
Escy Gire el anillo de matar y tire de la nueva parte superior. Solo puede hacer esto si el comando anterior es Ctrlyo Escy.

ConstantineK
fuente
esto es invaluable - gracias - ¡Desearía que estuviera disponible como un archivo imprimible en alguna parte!
Matt b
Me doy cuenta de que no está "optimizado", pero; Archivo -> Imprimir?
Jason Salaz
Wow, estos son súper incómodos en comparación con el término en Linux ... ¿alguna forma de reasignar estas tonterías?
btk
Sí, prueba la página de manual de Bash. (No sé cómo hacerlo yo mismo.)
SilverWolf
6

Para aquellos que prefieren usar las teclas de flecha, presionar fnShift+ Left Arrowlo llevará a casa en la línea de comando. Del mismo modo, fnShift+ Right Arrowte llevará hasta el final.

pauln
fuente
6

Puede mover una palabra a la vez con option+ lefty option+ right.

Con respecto al uso de homey end, los enlaces predeterminados de Terminal son los siguientes:

  • shift+ home→ saltar al comienzo de la línea
  • shift+ end→ saltar al final de la línea
  • home → desplazarse hasta la parte superior del búfer de desplazamiento hacia atrás
  • end → desplazarse hasta la parte inferior del búfer de desplazamiento hacia atrás

En muchas otras aplicaciones de terminal (en múltiples plataformas), esos pares modificados y no modificados se invierten (es decir, desnudos homey endse usan para saltar alrededor de la línea actual y las versiones modificadas (ya sea por shifto por otra cosa) se usan para navegar por el búfer de desplazamiento hacia atrás ) Puede revertir los enlaces de Terminal para que funcionen de esa manera si lo desea haciendo lo siguiente:

Vaya al menú Terminal → Preferencias → pestaña Configuración / Perfil → subpestaña Teclado.

Luego modifique los pares clave-acción para que sean los siguientes:

  • ↖︎: Enviar texto: \ 033 [H
  • ⇧↖︎: Desplazarse hacia arriba
  • ↘︎: Enviar texto: \ 033 [F
  • ⇧↘︎: Desplazarse hacia abajo

Nota: \ 033 se ingresa en el cuadro de texto a enviar en el cuadro de diálogo Editar presionando la tecla de escape.

Mientras esté allí, es posible que desee intercambiar de manera similar los enlaces de modificados y no modificados page upy page down, para mantener las cosas consistentes: presionar una tecla de navegación con shiftrepresenta un comando para la Terminal (para navegar el búfer de desplazamiento como un documento), mientras presiona uno sin envía la pulsación de la tecla a través de lo que está funcionando dentro de él (por ejemplo bash, less, nano, screen, etc.). Los pares clave-acción para eso son:

  • ⇞: Enviar texto: \ 033 [5 ~
  • ⇧⇞: Desplazar página hacia arriba
  • ⇟: Enviar texto: \ 033 [6 ~
  • ⇧⇟: Desplazar página hacia abajo
Terry N
fuente
4

Las otras respuestas son geniales y más portátiles, pero aquí está "la forma OS X" para un teclado normal (que es opuesto a muchos otros terminales). Intenta lo siguiente:

ShiftHome- Principio de línea
ShiftEnd- Fin de línea

De http://www.greenend.org.uk/rjk/tech/macbits.html

Alpha Fighter
fuente
4

La asignación homey las endteclas con la funcionalidad deseada resolverán fácilmente el problema.

Se han publicado muchas respuestas, pero en caso de que las esté utilizando zsh, puede configurarlas homepara:

\001

y configurar enda:

\005

haciendo clic en preferencia - perfil - teclado.

Dean Seo
fuente
Intenté esto también, pero luego rompe Home y End en vim :( Puede asignarlos a lo que sugirió Alfredo Cardigliano: Clave: ↖ Acción: \ 033OH Clave: ↗ Acción: \ 033OF
curlingdude
¡Esto funcionó perfectamente para mí! Solo uso Nano, así que no hay problemas aquí.
Sterling Bourne
Sí, esto está funcionando, pero no resuelve el problema en general. Me mudé de bash a zsh y me usaron FN-SHIFT-LEFT / RIGHT .. esto resolvió mi problema: stackoverflow.com/questions/8638012/…
vlk
1

Esta es la forma más efectiva de hacerlo funcionar también con vim. Vaya a Terminal -> Preferencias -> Perfiles -> Teclado y agregue:

Clave: ↖ Acción: \ 033OH

Clave: ↗ Acción: \ 033OF

Alfredo Cardigliano
fuente
1

Me gustaría proporcionar una solución alternativa a este problema. Esto funciona muy bien si eres un usuario vi. Vim Key Bindings en Terminal proporciona una manera de usar su terminal en un estilo vim. Puede hacerlo escribiendo el set -o viterminal y siéntase libre de colocarlo .bash_profilesi lo desea. Después de esto, su terminal es efectivamente un editor vim. Puede usar la esctecla para ingresar al modo de comando y caminar de una manera vim. Por ejemplo, 0te lleva al principio y $te lleva al final. También puede usar Iy Apara ir al principio y al final y pasar al modo de edición de inmediato. wy bte permite avanzar y retroceder una palabra. Y si intentas entrar en modo visual presionandov, se le dará un editor vim y el texto que tenga cuando salga de este editor se ejecutará en el terminal.

Tenga en cuenta que este enlace de teclas vim anulará todas las teclas de acceso rápido que aprendió de otras respuestas.

Fxyang
fuente
0

Aquí está la lista en forma imprimible, según lo desee :)

http://pastebin.com/uCqwn7qs

También arreglé un "error" en la descripción. Esto es lo que originalmente podías leer en las instrucciones:

ESC-d Mata desde el cursor el comienzo de la palabra anterior, o si está entre palabras, hasta el comienzo de la palabra anterior.

Esto huele mal a un error de cortar y pegar, ya que ambas oraciones parciales dicen lo mismo. Según la lógica simple, la primera mitad debe leer "desde el cursor hasta el comienzo de la palabra actual".

the_helping_hand
fuente
0

... ¿qué hay de saltar de palabra? (Ctrl-izquierda y Ctrl-derecha en Windows)

# in ~/.inputrc
"\033[5C": forward-word
"\033[5D": backward-word
calu
fuente