Назад | Перейти на главную страницу

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

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

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

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

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

Есть ли способ сделать так, чтобы завершение zsh больше походило на bash в этом отношении?

setopt noautomenu
setopt nomenucomplete

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

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

setopt +o menucomplete

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

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

autoload -U compinstall
compinstall

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

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

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

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

bind '"\C-i": menu-complete' # do menu completion