Подтвердить что ты не робот

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

4b9b3361

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