Как сделать, чтобы zsh-завершение действовало как bash-завершение?

Я недавно перешел из bash в zsh (который я использую с "о мой zsh"), но меня раздражает одна вещь:

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

Это отличается от bash, где вам только что показывают список завершений. Если все дополнения имеют одинаковый префикс, то этот префикс заполняется. Вы можете выбрать тот, который вы хотите, продолжая печатать.

Я считаю, что последний вариант предпочтительнее, поскольку он быстрее набирается, чем выбирает завершение, нажимая на вкладку несколько раз.

Есть ли способ заставить zsh Завершение действовать в этом отношении как bash?

2 ответа

setopt noautomenu
setopt nomenucomplete

Вам нужны оба из них. Если вы нажмете клавишу Tab достаточное количество раз, вы получите список завершений, но он никогда не добавит никаких символов к тому, что вы набрали до сих пор.

Я не думаю, что это поведение по умолчанию, но вы можете отключить его с помощью:

setopt +o menucomplete

Другие параметры, которые по-разному влияют на это поведение: autolist, automenu, bashautolist, listambiguous, Смотрите раздел "Завершение" man zshoptions для деталей. Вы можете добавить эту команду в свой ~/.zshrc файл.

Вы можете настроить многие другие вещи в интерактивном режиме, выполнив:

autoload -U compinstall
compinstall

и следуя подсказкам и меню.

В Bash это поведение контролируется привязкой Tab к complete или же menu-complete в ~/.inputrc:

"\C-i": complete   # do list completion

или из командной строки или в ~/.bashrc:

bind '"\C-i": menu-complete' # do menu completion
Другие вопросы по тегам