Как быстрее перемещаться по длинным командам?

136

Есть ли способ ускорить навигацию по Linux CLI, когда мне нужно вводить длинные команды? Я просто использую стрелки прямо сейчас, и - если у меня длинная команда, потребуется некоторое время, чтобы добраться от начала команды до ее середины.

Есть ли способ, например, перейти к середине команды, не используя стрелки?

Стан
источник

Ответы:

174

Некоторые полезные привязки клавиш для редактирования строк, предоставляемые библиотекой Readline :

  • Ctrl-A: перейти к началу строки
  • Ctrl-E: перейти к концу строки
  • Alt-B: пропустить одно слово назад
  • Alt-F: пропустить одно слово вперед
  • Ctrl-U: удалить в начало строки
  • Ctrl-K: удалить до конца строки
  • Alt-D: удалить до конца слова
Адам Быртек
источник
7
+1, потому что это работает, даже если по некоторым причинам стрелки ctrl не работают. Стоит отметить, что для screenпользователей Ctrl-A становится Ctrl-A A.
enzotib
3
Чтобы отменить удаление (или переместить текст, удалив его), используйте Ctrl + Y.
Lekensteyn
7
Ctrl + стрелка вправо, Ctrl + стрелка влево стоит упомянуть.
Mac
3
В Ubuntu с помощью Gnome и GnomeTerminal Alt-Aвместо перемещения курсора открывается меню. Как вы используете Alt-Aс Gnome? Я имею в виду, что Gnome используется по умолчанию, поэтому, вероятно, любой, кто читает это, будет запускать терминал в Gnome.
Джейсон
1
Если вы подключаетесь к Ubuntu из OS X через SSH, вам, возможно, придется использовать «Esc» вместо Ctrl, например, Esc-A, Esc-E и так далее. Это верно для iTerm и Terminal.
Фред Клаузен
77

Еще несколько ярлыков отсюда

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
источник
Спасибо за этот простой список без чата.
neverMind9
14

Если вы являетесь пользователем vi [m] и bash, может оказаться полезным, чтобы readline (используемый bash) использовал редактирование в стиле vi, добавляя set editing-mode viв свои файлы ~/.inputrcили /etc/inputrcфайлы. Или вы можете просто заставить bash использовать редактирование в стиле vi, выполнив команду bash set -o vi. Добавьте команду в свой ~/.bashrcфайл, чтобы сделать поведение постоянным.

Если вы пользователь zsh, добавьте его bindkey -vв свой .zshrcфайл для редактирования в стиле vi.


источник
8

Я не знаю, как конкретно перейти к середине без использования клавиш курсора. Тем не менее, я могу порекомендовать использовать CTRL + клавишу курсора, чтобы перейти от пустого к пустому (т.е. перейти от одного слова к другому).

Кори Внук
источник
1

Исходный код-фрагмент ниже в вашем .bashrc. Ctrl-a переходит к началу, а нажатие Ctrl-a снова переходит к середине.

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'

Или, если вы хотите использовать Ctrl-Something для прямого перехода к середине, измените код на:

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

И привязать его к чему-то другому, чем Ctrl-a.

marukse
источник