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

584   5  

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_12391983421

P. 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

    Ничего не найдено.