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

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

$ vim fi

Нажмите

$ vim file.py

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

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

Ответ 1

Возможно, что-то вроде

# ~/.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 проверяет интерактивный режим)

Обычно Up и Down привязаны к функциям 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 для командной строки оболочки и истории.

Ответ 2

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

Проверка

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

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

. /etc/bash_completion

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

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

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