Как изменить завершение истории bash, чтобы завершить то, что уже находится на линии?


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

$ vim fi

пресс

$ vim file.py

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

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

5 122

5 ответов:

наверное, что-то вроде

# ~/.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 к этим функциям, а не смещать нормальную работу вверх / вниз.

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

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


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

Bash использует библиотека GNU Readline для командной строки и истории.

обновление .inputrc следующим образом:

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

"\C-[OB": history-search-forward
"\C-[[B": history-search-forward

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

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

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

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

если set enable-keypad on в своем ~/.inputrc как некоторые st (suckless простой терминал) пользователи могут знать, что клавиши со стрелками находятся в режиме клавиатуры. 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: специальные клавиши

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

Регистрация

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

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

. /etc/bash_completion

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

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

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