¿Cómo navegar comandos largos más rápido?

136

¿Hay alguna forma de acelerar la navegación de la CLI de Linux cuando debo ingresar comandos largos? Simplemente uso las flechas en este momento y, si tengo un comando largo, me toma algún tiempo llegar desde el inicio del comando hasta la mitad.

¿Hay alguna manera de, por ejemplo, saltar al medio del comando sin usar flechas?

Stann
fuente

Respuestas:

174

Algunas asociaciones de teclas de edición de línea útiles proporcionadas por la biblioteca Readline :

  • Ctrl-A: ir al comienzo de la línea
  • Ctrl-E: ir al final de la línea
  • Alt-B: salta una palabra hacia atrás
  • Alt-F: saltar una palabra hacia adelante
  • Ctrl-U: eliminar al comienzo de la línea
  • Ctrl-K: eliminar al final de la línea
  • Alt-D: eliminar hasta el final de la palabra
Adam Byrtek
fuente
77
+1 porque esto funciona incluso cuando, por alguna razón, ctrl-arrows no funciona. Vale la pena señalar que, para los screenusuarios, Ctrl-A se convierte en Ctrl-A A.
enzotib
3
Para deshacer una eliminación (o mover texto eliminándola), use Ctrl + Y.
Lekensteyn
77
Ctrl + flecha derecha, Ctrl + flecha izquierda vale la pena mencionar.
mac
3
En Ubuntu usando Gnome y GnomeTerminal Alt-Aabre el menú en lugar de mover el cursor. ¿Cómo se usa Alt-Acon Gnome? Quiero decir, Gnome es el predeterminado, por lo que es probable que cualquiera que lea esto ejecute un terminal en Gnome.
Jason
1
Si se está conectando a Ubuntu desde OS X a través de SSH, es posible que deba usar "Esc" en lugar de Ctrl, por ejemplo, Esc-A, Esc-E, etc. Esto es cierto para iTerm y Terminal.
Fred Clausen
77

Algunos atajos más desde aquí

Ctrl + a  go to the start of the command line
Ctrl + e  go to the end of the command line
Ctrl + k  delete from cursor to the end of the command line
Ctrl + u  delete from cursor to the start of the command line
Ctrl + w  delete from cursor to start of word (i.e. delete backwards one word)
Ctrl + y  paste word or text that was cut using one of the deletion shortcuts (such as the one above) after the cursor
Ctrl + xx  move between start of command line and current cursor position (and back again)
Alt + b  move backward one word (or go to start of word the cursor is currently on)
Alt + f  move forward one word (or go to end of word the cursor is currently on)
Alt + d  delete to end of word starting at cursor (whole word if cursor is at the beginning of word)
Alt + c  capitalize to end of word starting at cursor (whole word if cursor is at the beginning of word)
Alt + u  make uppercase from cursor to end of word
Alt + l  make lowercase from cursor to end of word
Alt + t  swap current word with previous
Ctrl + f  move forward one character
Ctrl + b  move backward one character
Ctrl + d  delete character under the cursor
Ctrl + h  delete character before the cursor
Ctrl + t  swap character under cursor with the previous one
karlacio
fuente
Gracias por esta lista sencilla, sin chit-chat.
neverMind9
14

Si eres un usuario de vi [m] y bash, puede que te resulte útil hacer que readline (utilizado por bash) use la edición de estilo vi agregando set editing-mode vitus archivos ~/.inputrco /etc/inputrc. O bien, puede hacer que bash use la edición de estilo vi ejecutando el comando bash set -o vi. Agregue el comando a su ~/.bashrcarchivo para que el comportamiento sea persistente.

Si eres un usuario de zsh, agrégalo bindkey -va tu .zshrcarchivo para editarlo al estilo vi.


fuente
8

No conozco una manera de saltar específicamente al medio sin usar las teclas del cursor. Sin embargo, puedo recomendar el uso de la tecla CTRL + cursor para pasar de un espacio en blanco a otro (es decir, saltar de una palabra a otra).

Kory Wnuk
fuente
1

Obtenga el fragmento de código a continuación en su .bashrc. Ctrl-a salta al inicio y presionar Ctrl-a nuevamente salta al medio.

jump_mid() {
    if [ "$READLINE_POINT" -eq "0" ]; then
        LEN=${#READLINE_LINE}
        POS=$(($LEN / 2))
        READLINE_POINT=$POS
    else
        READLINE_POINT=0
    fi
}
bind -x '"\C-a" : jump_mid'

O si desea usar Ctrl-Something para saltar directamente al medio, cambie el código a:

jump_mid() {
    LEN=${#READLINE_LINE}
    POS=$(($LEN / 2))
    READLINE_POINT=$POS
}

Y vincularlo a algo diferente a Ctrl-a.

marukse
fuente