Динамически обновлять список завершения в Zsh

13

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

Они должны появляться, когда я Tabвпервые, а потом динамически обновляюсь с каждым добавленным новым письмом. Поведение по умолчанию состоит в том, что предложения пересматриваются только тогда, когда вы Tabснова захотите сохранить это повторное нажатие клавиши. ( Обновление: но только перечислить возможные завершения, оно не должно автоматически изменять мою фактическую строку приглашения, даже если остался только один вариант.)

Есть ли способ добиться такого поведения?

F30
источник
Вы можете глубоко погрузиться в настройку zshповедения. Что именно должно произойти? В данный момент этот вопрос звучит так, как будто вы хотите, чтобы варианты выбора были указаны для каждого нажатия клавиши после первоначальной вкладки, но на самом деле это ничего не завершит. Должно ли каждое нажатие клавиши вести себя так, как если бы оно сопровождалось нажатием клавиши TAB? Имейте в виду, что это будет означать довольно большой забой для непреднамеренных завершений.
Пет
@ user112553 Первый вариант: в этом смысле он не должен вести себя как повторный TAB. Я просто хочу, чтобы список предложений динамически корректировался.
F30

Ответы:

2

Один способ, который может предложить решение, которое вы хотите, это incremental-complete-word:

zle -N incremental-complete-word
bindkey '^Xi' incremental-complete-word

Это загружает функцию и связывает ее с Ctrl- X i. Теперь вы можете попробовать это:

> k^Xi
incremental (complete): -no prefix-

В этом примере kбыла напечатана буква , а затем Control-X i.

> kil
incremental (complete): kill       

Я напечатал, ilи теперь было одно возможное завершение ( kill). Можно принять это и нажать Enter.

> kill^D
incremental (complete): -no prefix-
- external command -
kill      killall   killall5

Набрав Ctrl- Dzsh показывает возможные дополнения.

От zshcontrib(1):

incremental-complete-word
Это позволяет инкрементное завершение слова. После запуска этой команды после каждого введенного символа может отображаться список вариантов завершения, которые можно удалить с помощью ^Hили DEL. Нажатие возврата пока подтверждает завершение и возвращает вас к обычному редактированию (то есть командная строка не выполняется немедленно). Вы можете нажать, TABчтобы сделать нормальное завершение, ^G чтобы вернуться к состоянию, когда вы начали, и ^Dвывести список совпадений.

QBi
источник