Как сделать, чтобы 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