Как я могу сделать завершение вкладки bash, например, завершение вкладки vim и цикл через совпадение совпадений?
Я хотел найти решение для этого в течение ЛЕТ.
По этой причине я гораздо более продуктивен в vim при манипулировании файлами, чем в bash.
Если у меня есть
file_12390983421
file_12391983421
file_12340983421
file_12390986421
В bash и наберите file_1-> tab, он явно перечисляет:
file_12390983421 file_12391983421 file_12340983421 file_12390986421
И это ужасно скучно и больно работать.
Одна и та же последовательность в vim будет перебирать файлы по одному.
Пожалуйста, кто-нибудь подскажет, как это сделать в bash, или, если есть другая оболочка, которая может это сделать, я переключусь завтра.
Ответы
Ответ 1
По умолчанию TAB
привязан к команде complete
readline. Ваше желаемое поведение будет menu-complete
. Вы можете изменить настройки чтения, отредактировав ~/.inputrc
. Чтобы восстановить TAB
, добавьте эту строку:
TAB: menu-complete
Подробнее см. раздел READLINE
в man bash
.
Ответ 2
Для bash> = 4 вам могут понравиться эти настройки:
# If there are multiple matches for completion, Tab should cycle through them
bind 'TAB':menu-complete
# Display a list of the matching files
bind "set show-all-if-ambiguous on"
# Perform partial completion on the first Tab press,
# only start cycling full results on the second Tab press
bind "set menu-complete-display-prefix on"
Эта настройка похожа на Vim set wildmode=longest:full:list,full
Я извлек эти настройки из этого вопроса на сайте Unix & Linux.
Ответ 3
В верхней части
# cycle forward
Control-k: menu-complete
# cycle backward
Control-j: menu-complete-backward
вы также можете рассмотреть возможность добавления
# display one column with matches
set completion-display-width 1
Таким образом, вы сохраните текущую функциональность Tab и сделаете bash отображение возможностей в одном столбце. Поэтому вместо
file_12340983421 file_12390983421 file_12390986421 file_12391983421
вы получите
file_12340983421
file_12390983421
file_12390986421
file_12391983421
P.S. Вы можете получить последнюю библиотеку readline
из этого веб-сайта библиотеки GNU Readline.
Ответ 4
Благодаря @sth я нашел лучшее для меня:
Чтобы сохранить обычную вкладку bash, а затем используйте ctl-f для циклического перехода при необходимости с помощью меню
поместите это в ваш .inputrc файл:
"\C-f": menu-complete
Ответ 5
По моему опыту, решение, предоставленное в ответе, никогда не работало для меня полностью. TL; DR: Добавьте set -o vi
в ваш ~/.bashrc
.
При использовании menu-complete в сочетании с сочетаниями клавиш vi я должен убедиться, что мой ~/.bashrc
имеет:
set -o vi
Моему ~/.inputrc
никогда не было достаточно иметь:
TAB: menu-complete
set editing-mode vi
set keymap vi
Я предполагаю, что каким-то образом set editing-mode
и set keymap
клавиш TAB:...
настройку TAB:...
, но я не изучил документацию полностью, чтобы выяснить, почему это так.