Как я могу заставить завершение вкладки 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, или если есть другая оболочка, которая может это сделать, я переключусь завтра.
5 ответов:
по умолчанию
TABсвязан сcompleteкоманда readline. Ваше желаемое поведение будет . Вы можете изменить настройки readlines путем редактирования~/.inputrc. Для повторной привязкиTABдобавьте следующую строку:TAB: menu-completeдля более подробной информации см. на
man bash.
на
# cycle forward Control-k: menu-complete # cycle backward Control-j: menu-complete-backwardвы также можете рассмотреть возможность добавления
# display one column with matches set completion-display-width 1таким образом, вы сохраните текущую функциональность вкладки и заставите bash отображать возможности в одном столбце. Так что вместо
file_12340983421 file_12390983421 file_12390986421 file_12391983421вы получили бы
file_12340983421 file_12390983421 file_12390986421 file_12391983421P. S. Вы можете получить актуальную
readlineбиблиотека от этого библиотека GNU Readline сайт.
для 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.
благодаря @sth я нашел то, что лучше всего работает для меня:
чтобы сохранить нормальное завершение вкладки bash, а затем использовать ctl-f для циклического использования при необходимости с помощью меню-complete
положите это в свой .файл inputrc:
"\C-f": menu-complete
по моему опыту, решение, представленное в ответе sth, никогда полностью не работало для меня. TL; DR добавить
set -o viна~/.bashrc.при использовании меню-complete в сочетании с vi keybindings, я должен убедиться, что
set -o viпоявляется где-то в моем
~/.bashrc. Мне никогда не было достаточно просто иметьTAB: menu-complete set editing-mode vi set keymap viв своем
~/.inputrc.Я думаю, что как-то
set editing-modeиset keymapэто выбитьTAB: ...настройка, но я не изучил документацию тщательно, чтобы выяснить, почему это так.
Comments