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?


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.


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

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/


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.


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.


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.


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.


¿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.


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 .


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!


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.



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.


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


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!


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.

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.