Вопрос: Как сделать zsh завершение, как bash


Я использую zsh. Это хорошая оболочка, особенно для функции автоматического завершения. Но когда я нажимаю вкладку, она всегда автоматически заполняется первой опцией завершения. Например, в моей папке есть два файла.

Mydata.txt
YourData.txt

Если я напечатаю vim, пробел, затем нажмите табуляция, он будет автоматически заполняться Mydata.txt вместо того, чтобы просто перечислить их и ждать ввода. Мне не нравится продолжать нажимать вкладку, чтобы выбрать файлы. Гораздо проще нажимать несколько букв.

Я попытался пересмотреть .zshrc и установить

unsetopt MENU_COMPLETE

Но это не сработает.

Может ли кто-нибудь дать мне несколько намеков?


2
2018-06-02 10:44


Источник




Ответы:


Для справки, и поскольку я не совсем уверен, как bash ведет себя точно, я цитирую из Руководство пользователя к Z-Shell Питер Стивенсон, нынешний сопровождающий zsh,

6.2.1 Неоднозначные доработки

Самая большая группа опций имеет дело с тем, что происходит, когда завершение   является неоднозначным, другими словами, существует более одного возможного   завершение. Семь релевантных вариантов следующие: скопировано из   FAQ; возможно много различных комбинаций:

  • с NO_BEEP установите, что раздражающий звуковой сигнал исчезнет,
  • с NO_LIST_BEEP, звуковой сигнал отключается только для двусмысленных завершений,
  • с AUTO_LIST set, когда заполнение неоднозначно, вы получаете список без ввода CTRL+D,
  • с BASH_AUTO_LIST set, список происходит только во второй раз, когда вы нажимаете вкладку на двусмысленное завершение,
  • с LIST_AMBIGUOUS, это изменяется так, что ничего не отображается, если есть однозначный префикс или суффикс для вставки - это может   сочетаться с BASH_AUTO_LIST, так что, когда они применимы   вам нужно нажать кнопку три раза для распечатки,
  • с REC_EXACT, если строка в командной строке точно соответствует одному из возможных завершений, она принимается, даже если есть   другое завершение (т. е. эта строка с добавлением чего-то еще), что   также соответствует,
  • с MENU_COMPLETE set, одно завершение всегда вставлено полностью, затем, когда вы нажимаете TAB он меняется на следующий и т. д.   пока вы не вернетесь туда, где вы начали,
  • с AUTO_MENU, вы получаете только поведение меню, когда вы снова нажимаете TAB на неоднозначное завершение.

Вы, вероятно, захотите использовать (но, как я уже сказал, я не уверен, пожалуйста, не стесняйтесь меня исправлять)

setopt BEEP NO_AUTOLIST BASH_AUTOLIST NO_MENUCOMPLETE

где setopt NO_OPTION эквивалентно unset OPTION,


4
2018-06-03 08:03



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


Я нашел ответ сам. Если я установил

zstyle ': завершение::: *: по умолчанию 'menu no select

Затем я могу ввести символы, чтобы выбрать опции автозаполнения. Хотя, я не могу выбрать по списку.


2
2018-06-03 05:24





я использую

 setopt autolist

Это делает то, что вы хотите?


0
2018-06-02 11:36



Спасибо, Дженс, я использовал «setopt auto list, unset MENU_CoMPLETE», но он не работает. - HXGuo