157

Is there a way speed up Linux CLI navigation when I must enter long commands? I simply use arrows right now, and - if I have a long command it takes some time to get from start of the command to the middle of it.

Is there a way to for example jump to the middle of the command without using arrows?

5 Answers 5

203

Some useful line editing key bindings provided by the Readline library:

  • Ctrl + A: go to the beginning of line
  • Ctrl + E: go to the end of line
  • Alt + B: skip one word backward
  • Alt + F: skip one word forward
  • Ctrl + U: delete to the beginning of line
  • Ctrl + K: delete to the end of line
  • Alt + D: delete to the end of word
12
  • 7
    +1 because this works even when, for some reasons, ctrl-arrows do not work. Worth to note, for screen users, Ctrl-A becomes Ctrl-A A.
    – enzotib
    May 27, 2011 at 18:54
  • 3
    To undo a deletion (or move text by deleting it), use Ctrl + Y.
    – Lekensteyn
    Jun 8, 2011 at 22:48
  • 7
    Ctrl+Right arrow, Ctrl+Left arrow worth mentioning.
    – mac
    Jan 16, 2014 at 15:04
  • 3
    On Ubuntu using Gnome and GnomeTerminal Alt-A opens the menu instead of moving the cursor. How do you use Alt-A with Gnome? I mean, Gnome is the default, so it's likely anyone reading this would be running a terminal in Gnome.
    – Jason
    Aug 5, 2014 at 23:42
  • 1
    If you're connecting to Ubuntu from OS X over SSH you may have to use "Esc" instead of Ctrl e.g., Esc-A, Esc-E and so on. This is true for iTerm and Terminal. Jan 28, 2015 at 0:30
86

Some more shortcuts from here

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
1
  • 2
    Thank you for this straightforward, chit-chat-less list.
    – neverMind9
    Jul 9, 2018 at 10:04
17

If you're a vi[m] and bash user, you may find it useful to make readline (used by bash) use vi-style editing by adding set editing-mode vi to your ~/.inputrc or /etc/inputrc files. Or, you could just make bash use vi-style editing by running the bash command set -o vi. Add the command to your ~/.bashrc file to make the behavior persistent.

If you're a zsh user, add bindkey -v to your .zshrc file for vi-style editting.

1
8

I do not know of a way to specifically jump to the middle without using the cursor keys. However, I can recommend using Ctrl + cursor key to move from blank to blank (i.e., jump from one word to another).

0
5

Source the code-snippet below in your .bashrc. Ctrl-a jumps to the start and pressing Ctrl-a again jumps to the middle.

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'

Or if you want to use Ctrl-Something to directly jump to the middle, change the code to:

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

And bind it to something different than Ctrl-a.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.