Автозаполнение Bash: сначала список файлов, а затем циклический переход по ним


27

Можно ли настроить bash таким образом, чтобы на первой вкладке автозаполнения он перечислял все возможные файлы, а на последующих - выбор?

Оба варианта легко сделать по отдельности, и я мог бы связать их с разными клавишами, но вышеприведенное было бы идеально, но я не могу найти ничего об этом в сети.


3
Прошло много времени с тех пор, как я использовал ZSH, но я считаю, что его функции автозаполнения вот так.
Иордания

1
@jordanm Ну, похоже, вариант, если больше ничего не работает, но это также повлечет за собой обновление всего от .bashrc и т. д. до эквивалентов ZSH, которых я бы очень хотел избежать.
Во

Ответы:


31

Это похоже на то, что вы хотите:

bind "TAB:menu-complete"
bind "set show-all-if-ambiguous on"

1
Почти идеально, за исключением небольшого недостатка в том, что он также автоматически заполняется на первой вкладке, что может немного раздражать, если я просто пытаюсь выяснить точное имя (т.е. мне нужно удалить еще немного символов, если я хочу изменить потом), но я вполне готов жить с этим.
Во

1
Как это можно легко отменить?
Дингалападум

1
bind "TAB:complete"; bind "set show-all-if-ambiguous off"
Джим Пэрис

13
@Voo добавить третью строку bind "set menu-complete-display-prefix on"будет просто перечислить кандидатов на первой вкладке без автозаполнения.
Найтри

2
@Naitree не может поддержать ваше предложение достаточно. Это работает и так, намного лучше, чем стандартное поведение bash. Спасибо.
JBeurer

1

Это то, что я использую. Насколько я могу сказать, это именно то, что вы хотите.

# make tab cycle through commands after listing
bind '"\t":menu-complete'
bind "set show-all-if-ambiguous on"
bind "set completion-ignore-case on"
bind "set menu-complete-display-prefix on"

Это работает на Mac (10.13 и 10.14) и Ubuntu (16.04 и 18.04).


0

Вы рассматривали? На него ссылались в суперпользователе ...

[[ $- = *i* ]] && bind TAB:menu-complete

1
menu-completeэто только половина того, что задает вопрос. Как говорится в вопросе, «[b] другие варианты легко сделать отдельно» .
jw013

Да, я знаю, как изменить поведение на один из двух вариантов, но это простая часть. Настоящая проблема заключается в том, как объединить два в один.
Во
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.