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

27

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

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

Voo
источник
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).

Milo
источник
0

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

[[ $- = *i* ]] && bind TAB:menu-complete
Дзынь
источник
1
menu-completeэто только половина того, что задает вопрос. Как говорится в вопросе, «[b] другие варианты легко сделать отдельно» .
jw013
Да, я знаю, как изменить поведение на один из двух вариантов, но это простая часть. Настоящая проблема заключается в том, как объединить два в один.
Во