Как мне изменить завершение истории bash, чтобы завершить то, что уже на линии? - PullRequest
129 голосов
/ 23 июня 2009

Пару месяцев назад я нашел команду, которая заставляла мою историю bash автоматически завершать то, что уже находится на линии при нажатии стрелки вверх:

$ vim fi

Нажмите

$ vim file.py

Я бы хотел установить это на моем новом компьютере, потому что это экономит много времени при ведении большой истории. Проблема в том, что я не могу на всю жизнь вспомнить, где это было упомянуто, и, к сожалению, чтение бесконечных ссылок и руководств по bash тоже не помогло.

Кто-нибудь знает команду?

Ответы [ 5 ]

218 голосов
/ 23 июня 2009

Вероятно, что-то вроде

# ~/.inputrc
"\e[A": history-search-backward
"\e[B": history-search-forward

или эквивалентно

# ~/.bashrc
if [[ $- == *i* ]]
then
    bind '"\e[A": history-search-backward'
    bind '"\e[B": history-search-forward'
fi

(оператор if проверяет интерактивный режим)

Обычно «Вверх» и «Вниз» привязаны к функциям Readline previous-history и next-history соответственно. Я предпочитаю привязывать PgUp / PgDn к этим функциям вместо смещения обычной операции Up / Down.

# ~/.inputrc
"\e[5~": history-search-backward
"\e[6~": history-search-forward

После изменения ~/.inputrc, перезапустите вашу оболочку или используйте Ctrl + X , Ctrl + R , чтобы сообщить ей перечитайте ~/.inputrc.


Кстати, если вы ищете соответствующую документацию:

Bash использует Библиотеку GNU Readline для приглашения оболочки и истории.

4 голосов
/ 22 января 2014

Обновите .inputrc следующим:

"\C-[OA": history-search-backward
"\C-[[A": history-search-backward

"\C-[OB": history-search-forward
"\C-[[B": history-search-forward
1 голос
/ 30 апреля 2017

Если set enable-keypad on находится в вашем ~/.inputrc, как некоторые пользователи ( простой отстой ) могут знать, что клавиши со стрелками находятся в режиме клавиатуры. Ubuntu поставляется с этим полезным /usr/share/doc/bash/inputrc.arrows:

# This file controls the behaviour of line input editing for
# programs that use the Gnu Readline library.
#
# Arrow keys in keypad mode
#
"\C-[OD"        backward-char
"\C-[OC"        forward-char
"\C-[OA"        previous-history
"\C-[OB"        next-history
#
# Arrow keys in ANSI mode
#
"\C-[[D"        backward-char
"\C-[[C"        forward-char
"\C-[[A"        previous-history
"\C-[[B"        next-history
#
# Arrow keys in 8 bit keypad mode
#
"\C-M-OD"       backward-char
"\C-M-OC"       forward-char
"\C-M-OA"       previous-history
"\C-M-OB"       next-history
#
# Arrow keys in 8 bit ANSI mode
#
"\C-M-[D"       backward-char
"\C-M-[C"       forward-char
"\C-M-[A"       previous-history
"\C-M-[B"       next-history

Так что я не уверен, понадобятся ли вам все, но это не помешает иметь в вашем ~/.inputrc:

# Arrow keys in keypad mode
"\C-[OA": history-search-backward
"\C-[OB": history-search-forward
"\C-[OC": forward-char
"\C-[OD": backward-char

# Arrow keys in ANSI mode
"\C-[[A": history-search-backward
"\C-[[B": history-search-forward
"\C-[[C": forward-char
"\C-[[D": backward-char

Это также по той же теме: Мои клавиши курсора не работают , а также это xterm: специальные клавиши

1 голос
/ 10 декабря 2013

С ohmyzsh, используйте это в вашем .zshrc :

bindkey '^[OA' history-search-backward
bindkey '^[OB' history-search-forward

Чтобы перезагрузить, source ~/.zshrc или перезапустить терминал.

Источник: https://superuser.com/a/418299/71680

0 голосов
/ 23 июня 2009

Возможно, вам нужно включить завершение bash.

Проверка

  • /etc/profile
  • /etc/bash.bashrc
  • ~/.bashrc

чтобы узнать, является ли какой-либо из вышеперечисленных файлов источником /etc/bash_completion. т.е.

. /etc/bash_completion

Если /etc/bash___completion не получен ни от одного из перечисленных выше файлов, вам необходимо добавить его в один из них.

Если вы хотите, чтобы все пользователи bash на вашем компьютере имели завершение bash, укажите источник /etc/bash_completion из /etc/bash.bashrc.

Если только вы хотите завершить bash, укажите источник /etc/bash_completion из вашего ~/.bashrc.

...