¿Hay alguna manera de saltar a una parte anterior de un comando de línea de comandos en la Terminal de Mac?

9

A menudo me encuentro escribiendo largos comandos en el shell bash: cosas con muchos argumentos, direcciones web, rutas, etc., etc. De vez en cuando me doy cuenta de que olvidé, por ejemplo, poner mi "paquete ejecutivo" al comienzo del comando, o deletreé algo mal u olvidé las comillas. O algo tan simple como poner "cd" en lugar de "vim".

Así comienza el tedioso proceso de mantener presionada la tecla de flecha izquierda hasta que vuelva al comienzo del comando.

¿Hay alguna forma de saltar al comienzo de la línea nuevamente?

GlifoGrifo
fuente
2
Es posible que desee deshacerse de la aplicación de terminal predeterminada y descargar iTerm
Clement Herreman
¿Por qué? Acabo de comprobar, y parece comportarse más o menos igual. (La tecla de inicio funciona ahora, pero dado que tengo las otras teclas, eso realmente no importa). ¿Qué ofrece que haga que valga la pena rehacer todos mis ajustes, configuraciones y tareas y demás?
GlyphGryph
Esto parece algo que puede configurar con .inputrc
Rob
Además, para saltar una palabra a la vez, use ⌥B y ⌥F para saltar de un lado a otro, respectivamente.
fideli
@fideli, pero solo si ha habilitado "Usar opción como meta clave". Tenga en cuenta que a partir de Mac OS X Lion 10.7, la configuración predeterminada del teclado del Terminal asigna Opción-Flecha izquierda / Flecha derecha a Esc-b / f, por lo que no se necesita configuración.
Chris Page

Respuestas:

12

Además de ^ A y ^ E, puedes hacer

  • Esc- bpara retroceder una palabra
  • Esc- fsaltar una palabra hacia adelante
  • Ctrl- bpara retroceder un personaje
  • Ctrl- fpara avanzar un personaje

Consulte el manual de bash para ver los comandos para moverse .

Glenn Jackman
fuente
Una cosa a tener en cuenta: esto es de Emacs, y al agregar la emacsopción a sus shellopts puede obtener algo más de eso.
TC1
6

Puede usar los comandos de Emacs, por ejemplo:

  • ctrl-A para ir al comienzo de la línea de comando
  • ctrl-E para ir al final de la línea de comando

Esto es bash, no específico de Mac.

Mouviciel
fuente
3
set -o vi

Luego Escseguido por

^inicio de línea $final de línea buna palabra backword wuna palabra adelante

kizzx2
fuente
Soy un gran admirador de Vim, por lo que el principio de su respuesta es excelente para mí, pero la edición modal de la línea de comandos puede ser un poco confusa para el OP, ¡especialmente sin mencionar cómo volver a escribir! Regrese al modo de inserción usando i(insertar) para escribir antes del cursor o a(agregar) para escribir después del cursor.
Cascabel
He estado usando vi como mi editor de texto principal durante décadas, pero aún prefiero las asociaciones de teclas emacs para mi shell.
Keith Thompson
En realidad, el OP usa vim para toda la edición de texto, por lo que saber que puede establecer estándares vi es increíblemente útil. ¡Muchas gracias!
GlyphGryph
@Kieth Thompson: Solía ​​pensar lo mismo. Solo pensé que Shell no se mezcla bien con este modo de cambio de modo (como la vtecla irritante en modo vi). Pero después de un tiempo acabo de infectarme con vim, así que te sugiero que lo pruebes: P
kizzx2
1

Esto no responde a su pregunta, pero puede resolver su problema en algunos casos.

En bashel !!token se sustituye con su comando anterior. Entonces, si olvida agregar algo al comienzo de un comando (como sudo), puede hacer algo como esto

# ./super_secret_command --with-args
=> ACCESS DENIED

# sudo !!
sudo ./super_secret_command --with-args
=> ACCESS GRANTED
Sam
fuente
0

Puede configurar los Ctrl/Opt+Left/Rightaccesos directos regulares para usar en la Terminal. De esa manera, no tiene que volver a aprender todo cuando usa Terminal.

Abra Terminal »Preferencias ...» Configuración »(seleccione un perfil)» Teclado .

Allí, asigne los siguientes atajos:

  • Control + Cursor Left: Enviar cadena \033[1~a shell
  • Control + Cursor Right: Enviar cadena \033[4~a shell
  • Option + Cursor Left: Enviar cadena \033[5Da shell
  • Option + Cursor Right: Enviar cadena \033[5Ca shell

También me gusta lo siguiente ( Fn + Left/Right):

  • Home: Enviar cadena \033[1~a shell
  • End: Enviar cadena \033[4~a shell

ingrese la descripción de la imagen aquí

Daniel Beck
fuente
En Lion ⌥ ← y ⌥ → están vinculados M-by M-fpor defecto. Y ⌃ ← y ⌃ → son los atajos predeterminados para cambiar espacios.
Lri
0

Necesitaba esto en Cygwin, no en una Mac, pero agregar lo siguiente también ~/.inputrcpuede ayudar:

"\e[1;5C": forward-word   # ctrl + right
"\e[1;5D": backward-word  # ctrl + left 
Tom
fuente
0

No soy un usuario de Mac, pero ¿qué pasa con la Homeclave? Eso funciona bien en una terminal de Linux.

m0skit0
fuente
1
No, eso se desplaza a la parte superior de la ventana de terminal.
GlyphGryph
De manera predeterminada, Inicio y Fin desplazan la vista, que es el comportamiento estándar de Mac. Por defecto, Shift-Home y Shift-End envían "ESC [H" y "ESC [F", respectivamente. Todos estos son personalizables en Terminal> Preferencias> Configuración> [perfil]> Teclado .
Chris Page
0

La mejor manera de moverse por la línea de comandos en Mac Os X es usar mi perfil: https://github.com/lingtalfi/mac-terminal-shortcuts

Proporciona los siguientes atajos (intuitivos):

ALT-left: move one word backward
ALT-right: move one word forward
CTRL-left: move to the beginning of the line
CTRL-right: move to the end of the line
ALT-backspace: kill one word backward
ALT-del: kill one word forward
ALT-up: set word after cursor to uppercase
ALT-down: set word after cursor to lowercase
home: move to the beginning of the line
end: move to the end of the line    
CTRL-backspace: Same as ALT-backspace
CTRL-del: Same as ALT-del
abadejo
fuente