Cómo mover el cursor palabra por palabra en la Terminal OS X

762

Conozco la combinación Ctrl+ Apara saltar al comienzo del comando actual y Ctrl+ Epara saltar al final.

Pero, ¿hay alguna manera de saltar palabra por palabra, como lo hace Alt+ / en las aplicaciones Cocoa?

el hombre de hojalata
fuente
2
¿Qué caparazón estás usando? ¿Golpetazo?
Sargun Dhillon
44
iTerm2 es mucho más bonito que el terminal incorporado. Publiqué instrucciones a continuación sobre cómo personalizar el teclado :)
cwd
21
Los ALTaccesos directos se han agregado a Terminal en la última versión de OS X.
Mosty Mostacho
77
En mi opinión, esto no está fuera de tema, Bash Shell es un entorno de programación relevante, y los enlaces de línea de lectura son omnipresentes en la mayoría de las aplicaciones populares de CLI de Linux. Además, mire el número de votos a favor, la comunidad ha hablado.
GL2014
11
Vuelva a abrir el voto, OS X Terminal cuenta mucho como una herramienta de programación.
djechlin

Respuestas:

567

Fuera de la caja, puede usar el extraño Esc+ Fpara moverse al comienzo de la siguiente palabra y Esc+ Bpara moverse al comienzo de la palabra actual.

Kristian J.
fuente
47
Era inconveniente volver a presionar ambas teclas para volver a ejecutar el comando nuevamente. Me parece bastante lamentable hacer esto en la Terminal Mac OSX, en comparación con la Terminal GNOME.
Phương Nguyễn
245
Puede habilitar "Usar opción como metaclave" en Terminal> Preferencias> Configuración> [perfil]> Teclado . Entonces no tiene que escribir manualmente el Esc por separado.
Chris Page
77
Además, si presiona Esc+ Fcuando está al final de una línea o al otro combo de teclas al comienzo de la línea, simplemente inserta la letra. ¡Molesto!
Noldorin
10
Re "extraño": "F" y "B" significan "Adelante" y "Atrás". Control-F mueve el cursor hacia adelante un carácter, y Control-B mueve el cursor hacia atrás uno. Usar el modificador Meta (o ESC) significa "moverse por palabras". Estos son enlaces compatibles con emacs. Si está usando bash, hay una opción para usar enlaces compatibles con vi, o puede personalizarlos completamente con ~/.inputrc.
Chris Page
55
El uso de la opción como meta desafortunadamente no es una opción para aquellos de nosotros que necesitamos la tecla de opción para escribir símbolos de shell importantes como ~ y | (Como en un teclado francés).
Eric O Lebigot
417

En Mac OS X: los siguientes métodos abreviados de teclado funcionan de forma predeterminada. Tenga en cuenta que debe hacer que la tecla Opción actúe como Meta en las preferencias de Terminal (en la pestaña del teclado)

  • alt (⌥)+ Fpara saltar F hacia adelante por una palabra
  • alt (⌥)+ Bpara saltar B hacia atrás por una palabra

He observado que las combinaciones de teclas predeterminadas de emacs para la navegación de texto simple parecen funcionar en los shells de bash. Puedes usar

  • alt (⌥)+ Dpara eliminar una palabra a partir de la posición actual del cursor
  • ctrl+ Apara saltar al inicio de la línea
  • ctrl+ Epara saltar al final de la línea
  • ctrl+ Kpara matar la línea que comienza desde la posición del cursor
  • ctrl+ Ypara pegar texto desde el búfer kill
  • ctrl+ Rpara invertir la búsqueda de comandos que escribió en el pasado desde su historial
  • ctrl+ Spara buscar hacia adelante (funciona en zsh para mí pero no bash)
  • ctrl+ Fpara avanzar por un personaje
  • ctrl+ Bpara retroceder por un personaje
  • ctrl+ Wpara eliminar la palabra hacia atrás de la posición del cursor
Varun Katta
fuente
1
¡Gracias! Me preguntaba por qué no funcionó de fábrica, eso es exactamente lo que necesitaba.
Flov
11
Puede cambiar el meta en iterm2 de la siguiente manera: Preferencias -> Perfiles -> Teclas -> La tecla de opción izquierda actúa como +ESC, luego puede usar la OPCIÓN f / b para mover la palabra hacia adelante y hacia atrás en consecuencia. Más
Alan Dong
55
[ Ctrl + W ] - para eliminar la palabra hacia atrás de la posición del cursor
YemSalat
[ctrl + u] - para borrar toda la entrada
Cornelius
286

Así es como puedes hacerlo

Por defecto, la Terminal tiene estos atajos para moverse (izquierda y derecha) palabra por palabra:

  • esc+ B(izquierda)
  • esc+ F(derecha)

Puede configurar alt+ y generar esas secuencias por usted:

  • Abrir las preferencias de la Terminal ( cmd+ ,);
  • En la pestaña Configuración, seleccione Teclado y haga doble clic ⌥ ←si está allí, o agréguelo si no está.
  • Establezca el modificador como desee y escriba la tecla de acceso directo en el cuadro: esc+ B, generando el texto \033b(no puede escribir este texto manualmente).
  • Repita para word-right ( esc+ se Fconvierte \033f)

Alternativamente, puede consultar esta publicación de blog en textmate:

http://blog.macromates.com/2006/word-movement-in-terminal/

Fil
fuente
77
Para usuarios de MacOSX 10+ e iTerm: puede asignar el acceso directo de teclas en las preferencias globales o como una combinación de teclas de perfil. Asegúrese de que selecciona: "Enviar Secuencia de escape" en el menú desplegable y seleccionar la entrada solo Bpara volver o Fpara el avance en el Esc+campo
Gus
+1 para una gran mnemotécnica que no pensé antes. Definitivamente / lamentablemente no recordaré esto ahora porque configuré alt lefty alt rightpara generar esas secuencias
Arc676
Si agrego la asignación de teclas a la terminal, la vincula a '^ [B' 'en lugar de Esc-B.
Andrea Bergonzo
164

Cambie a iTerm2 . Es gratis y mucho mejor que la vieja terminal. También tiene muchas más opciones de personalización, como atajos de teclado.

También me encanta que puedes usar cmdy 1-9 para cambiar entre pestañas. Pruébalo y nunca volverás a la terminal normal :)

Cómo configurar las preferencias de teclado personalizadas en iterm2

  • Instalar iTerm2
  • Inicie y luego vaya al panel de preferencias.
  • Elija la pestaña de perfiles de teclado
  • Deberá copiar el perfil en algo nuevo y luego eliminar los atajos de teclas de flecha como ^+ Right/ Lefto si no le importa una copia de seguridad, simplemente elimínelos del perfil predeterminado.
  • A continuación, asegúrese de que su perfil modificado esté seleccionado (destacado)

Imagen 1.png

  • Ahora elija la pestaña del teclado (fila muy superior)

iTerm 2

  • Haga clic en el botón más para agregar un nuevo atajo de teclado
  • En el primer cuadro escriba CMD+Left arrow
  • En el segundo cuadro, elija "enviar código de escape"
  • En el tercer cuadro escriba la letra B

Imagen 2.png

  • Repita con las combinaciones de teclas deseadas. escape+ Bmueve una palabra a la izquierda, escape+ fmueve una palabra a la derecha.
  • También puede configurar cmd+ dpara eliminar la palabra delante del cursor con escape+d

A menudo presiono el botón equivocado ( cmd/ control/ alt) con una tecla de flecha, así que tengo mis combinaciones de teclas de flecha con esos botones configurados para saltar hacia adelante y hacia atrás, pero haga lo que mejor le convenga.

cwd
fuente
44
No importa lo que haga, no puedo ingresar Ctrl + Arrow Lefto Right, Upy Downfunciona: / intenté con y sin el nuevo perfil establecido de manera predeterminada
Tobi
44
Solución: tuve que deshabilitar los accesos directos de control de la misión en Preferencias del sistema MacOS -> Teclado :)
Tobi
La instrucción anterior ya no funciona con iTerm2. Consulte mis respuestas a continuación para iTerm2 Build 3.3.4.
Cuelgue el
150

En realidad, hay un enfoque mucho mejor. Mantenga presionado option( alten algunos teclados) y presione las teclas de flecha hacia la izquierda o hacia la derecha para moverse por palabra. Simple como eso.

option
option

También ctrlelo llevará al final de la línea y ctrlalo llevará al inicio.

mdubez
fuente
2
A veces esto no funciona en ciertos casos. Para mí, cuando abrí Terminal.app, estaba bien, pero para IntelliJ, simplemente imprimió [Dy [C. Para solucionar esto, agregue bind '"[D": backward-word'y bind '"[C": forward-word'a mi .bashrc.
Jamie Counsell
@JamieCounsell Agregué algo de enlace a mi .bashrcpero no funcionó, ¿algo malo para mí? (Uso RubyMine)
张艳军
@ 张艳军 No estoy seguro de si RubyMine lee .bashrccuando se inicia el terminal. Intente echo "here"ver si ese mensaje aparece cuando abre una nueva terminal. Además, debe cerrar y volver a abrir el terminal o ejecutarlo source ~/.bashrcpara que lea el nuevo archivo.
Jamie Counsell
79

Tengo Alt+ / trabajando: abra Preferencias »Configuración» Teclado , configure la entrada para el cursor de opción a la izquierda para enviar la cadena al shell: \ 033b , y configure el cursor de opción a la derecha para enviar la cadena al shell: \ 033f . También puede usar esto para otras combinaciones de teclas de control.

Peter Hilton
fuente
20
Para obtener el \ 033b, en realidad necesita presionar Esc, luego b.
Matthew Schinckel
77
Estoy en Snow Leopard y descubro que solo funciona cuando lo habilitas Enable option as meta key. Por cierto, es muy bueno. La clave seguramente será mucho más conveniente de alcanzar en comparación con Esc + B o Esc + F
Ph --ng Nguyễn
2
Por curiosidad, ¿qué está pasando exactamente aquí? ¿Por qué es este código diferente para comenzar en OSX? ¿Cómo puedo encontrar otros códigos similares?
Koobz
en mi mac sus Preferencias> Perfiles> Teclas de la tecla de opción izquierda configuradas como + Ecs
Arun
38

En realidad, depende de qué caparazón uses, sin embargo, la mayoría de las capas tienen enlaces similares. Los enlaces a los que se refiere (por ejemplo, Ctrl+ Ay Ctrl+ E) son enlaces que encontrará en muchos otros programas y se usan por edades, por cierto, también funcionan en la mayoría de las aplicaciones de interfaz de usuario.

Aquí hay un vistazo de los enlaces predeterminados para Bash:

Atajos de teclado Bash más importantes

Tenga en cuenta también que puede personalizarlos. Necesita crear un archivo, nombre como desee, llamé el mío .bash_key_bindings y lo puse en mi directorio de inicio. Allí puede establecer algunas opciones generales de bash y también puede establecer enlaces de teclas. Para asegurarse de que se apliquen, debe modificar un archivo llamado ".bashrc" que bash lee al inicio (debe crearlo, si no existe) y hacer la siguiente llamada allí:

bind -f ~/.bash_key_bindings

~ significa directorio de inicio en bash, como se indicó anteriormente, puede nombrar el archivo como desee y también colocarlo donde desee siempre que alimente la ruta correcta + nombre para vincular.

Déjame mostrarte algunos extractos de mi archivo .bash_key_bindings:

set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set show-all-if-ambiguous on
set bell-style none
set print-completions-horizontally off

Estos solo establecen un par de opciones (por ejemplo, deshabilitar la campana; todo esto se puede buscar en la página web de bash).

"A": self-insert
"B": self-insert
"C": self-insert
"D": self-insert
"E": self-insert
"F": self-insert
"G": self-insert
"H": self-insert
"I": self-insert
"J": self-insert

Esto asegura que los personajes solos no hagan nada más que asegurarse de que el personaje esté "mecanografiado" (se insertan en el shell).

"\C-dW": kill-word
"\C-dL": kill-line
"\C-dw": backward-kill-word
"\C-dl": backward-kill-line
"\C-da": kill-line

Esto es bastante interesante Si presiono Ctrl+ Dsolo (seleccioné d para eliminar), no sucede nada. Pero si luego escribo una w minúscula, la palabra a la izquierda del cursor se elimina. Si escribo una mayúscula, sin embargo, la palabra a la derecha del cursor se elimina. Lo mismo ocurre con l y L con respecto a la línea completa que comienza desde el cursor. Si escribo una "a", toda la línea se elimina realmente (todo antes y después del cursor).

Coloqué saltando una palabra hacia adelante en Ctrl+ Fy una palabra hacia atrás en Ctrl+B

"\C-f": forward-word
"\C-b": backward-word

Como puede ver, puede hacer un acceso directo, que conduce a una acción de inmediato, o puede hacer uno, que solo se inicia en una secuencia de caracteres y luego tiene que escribir uno (o más) caracteres para que una acción tenga lugar como mostrado en el ejemplo más arriba.

Entonces, si no está satisfecho con los enlaces predeterminados, no dude en personalizarlos como desee. Aquí hay un enlace al manual de bash para obtener más información.

Mecki
fuente
¿Cómo es el commandcódigo clave? En su ejemplo, controles \C, pero ¿cómo es command?
Paschalis
Básicamente quiero asignar Ctrl + A a cmd + izquierda (ir al comienzo de la línea)
Paschalis
1
@Paschalis En MacOS X, la tecla de comando se asigna a Metabash ( \M), cmd + left sería \M-\e[D. Sin embargo, no puede asignar cmd + ... a nada, todos los accesos directos de comandos son manejados (y por lo tanto tragados) por la aplicación de Terminal (los que nunca se reenvían al shell) y cmd + se asignan a "ventana anterior" si tiene múltiples Ventanas de terminal abiertas. Lo sentimos, simplemente no es posible con la aplicación Terminal.
Mecki
18

¡Utilice el preajuste de edición de texto natural !

ingrese la descripción de la imagen aquí

Esencialmente, une, entre otras secuencias de teclas, Opción + Flecha izquierda a ^[bsecuencia y Opción + Flecha derecha a^[f

Esto funciona en fish and bash, así como en la terminal psql.

Dziamid
fuente
Esta es la forma más eficiente de establecer un buen mapeo antiguo para las claves. ¡Gracias!
fedesismo
En caso de que alguien más se confunda como yo, tenga en cuenta que este valor predeterminado solo está disponible en la subpestaña Claves del perfil , no en la pestaña Claves de nivel superior .
ben-albrecht
15

Si eres un usuario de Vim, puedes probar el modo vim de bash. Ejecute esto o póngalo en su ~/.bashrcarchivo:

set -o vi

Por defecto estás en modo de inserción; pulsa escape y puedes moverte como lo haces en Vim en modo normal, por lo que el movimiento por palabra es wo b, y las teclas de movimiento habituales también funcionan .

jches
fuente
15

Si marca Use option as meta keyen la pestaña del teclado las preferencias, los comandos de estilo predeterminados de emacs para palabra hacia adelante y hacia atrás y ⌥F( Alt+ F) y ⌥B( Alt+ B) respectivamente.

Recomiendo leer De Bash a Z-Shell . Si quieres aumentar tu destreza bash / zsh!

Mate
fuente
1
Si, eso funciona. Pero el problema es cuando quiero escribir llaves ([] {} |) que están en la Opción-7, Opción-8 y Opción-9. Las opciones ahora son meta, por lo que termina con Meta-7, Meta-8 ... ¿Alguna idea?
Martin Wickman el
12

A partir de Mac OS X Lion 10.7, mapas terminal Option- Left/Right Arrowa Esc- b/fpor defecto, por lo que este está integrado por el golpe y los otros programas que utilizan combinaciones de teclas compatibles con estos emacs.

Chris Page
fuente
12

Mantenga presionada la tecla Opción y haga clic donde desee que se mueva el cursor

Dan Alboteanu
fuente
1
No es una mala solución.
duyn9uyen
8

En Bash, estos están vinculados a Esc- By Esc- F. Bash tiene muchos, muchos más atajos de teclado; Echa un vistazo a la salida de bind -ppara ver cuáles son.

Andy Lynch
fuente
4

Bajo iterm2's Preferencias> Perfil> Keys , hace clic en la +continuación asignaciones de teclas y grabar un nuevo acceso directo. Para Acción , seleccione Send Escape Sequencey escriba bo fhacia atrás y hacia adelante respectivamente.

Cuando intenté grabar uno para ( Ctrl+ ), noté en el campo Atajo de teclado que la flecha nunca apareció. Resulta que primero tuve que deshabilitar las Preferencias del sistema de Mac predeterminadas > Teclado> Accesos directos> Atajos de control de misión para que las cosas funcionen, ya que anularán los accesos directos predeterminados de iterm2. También debería ser cierto para la aplicación de terminal estándar.

Preferencias del sistema de teclado

qix
fuente
1

Nueva respuesta para los usuarios de iTerm2 Build 3.3.4:

Paso 1: (macOS X) Preferencias del sistema> Teclado> pestaña Accesos directos> Seleccionar control de misión (panel izquierdo)> Desmarcar accesos directos etiquetados como "Mover a la izquierda un espacio" y "Mover a la derecha un espacio"

Paso 2: (iTerm2 Build 3.3.4) Preferencias> Perfiles> Seleccionar * Predeterminado (panel izquierdo)> pestaña Teclas> Eliminar ambas entradas "⌥->" y "⌥ <-"> Establecer ambas teclas "Opción izquierda (⌥): "y" Tecla de opción correcta (⌥): "a Esc +

Sin perder el tiempo con los perfiles de shell, sin perder el tiempo con el terminal masOS inferior (predeterminado), sin incomodo Esc + F / B, enjuagar y repetir sin sentido.

¡¡¡Trato hecho!!!

¡Disfruten este consejo, mis compañeros PROGRAMADORES!

Colgar
fuente
0

Como se respondió anteriormente, puede agregar set -o visus combinaciones de teclas / ~/.bashrcusar , o bien puede agregar la siguiente parte para moverse con las teclas de flecha:vivim.bashrcCtrl

# bindings to move 1 word left/right with ctrl+left/right in terminal, just some apple stuff!
bind '"\e[5C": forward-word'
bind '"\e[5D": backward-word'
# bindings to move 1 word left/right with ctrl+left/right in iTerm2, just some apple stuff!
bind '"\e[1;5C": forward-word'
bind '"\e[1;5D": backward-word'

Para iniciar el efecto de estas líneas de código, source ~/.bashrcinicie o inicie una nueva sesión de terminal.

Chinmay
fuente