Как я могу заставить завершение вкладки bash вести себя так же, как завершение вкладки vim и циклически повторять совпадения? - PullRequest
70 голосов
/ 24 августа 2011

Я хотел найти решение для этого за ГОДЫ.

По этой причине я гораздо более продуктивен в vim при работе с файлами, чем bash.

Если у меня есть

file_12390983421
file_12391983421
file_12340983421
file_12390986421

В bash и наберите file_1-> tab он, очевидно, перечисляет:

file_12390983421 file_12391983421 file_12340983421 file_12390986421

И это ужасно скучно и больно работать.

То же самоеsequence в vim будет перебирать файлы по одному.

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

Ответы [ 5 ]

79 голосов
/ 24 августа 2011

По умолчанию TAB привязано к команде complete readline.Ваше желаемое поведение будет menu-complete вместо этого.Вы можете изменить настройки readlines, отредактировав ~/.inputrc.Чтобы перепривязать TAB, добавьте эту строку:

TAB: menu-complete

Подробнее см. В разделе READLINE в man bash.

17 голосов
/ 30 января 2018

Для 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's set wildmode=longest:full:list,full

Я вытащил эти настройки из этого вопроса на сайте Unix & Linux.

14 голосов
/ 23 мая 2012

поверх

# 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 Library .

6 голосов
/ 25 августа 2011

Благодаря @sth я нашел то, что лучше всего работает для меня:

Чтобы сохранить нормальное завершение вкладки bash, а затем используйте ctl-f для циклического просмотра при необходимости, используя menu-complete

putэто в вашем файле .inputrc:

"\C-f": menu-complete
0 голосов
/ 20 ноября 2015

По моему опыту, решение, предоставленное в ответе sth, никогда полностью не работало для меня. 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: ..., но я не изучил документацию, чтобы выяснить, почему это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...