Один із способів, який може запропонувати потрібне вам рішення, це 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):
інкрементальне-повне слово
Це дозволяє поступово завершити слово. Після запуску цієї команди після кожного введеного символу може бути показаний список варіантів завершення, який ви можете видалити за допомогою ^Hабо DEL. Якщо натиснути return, ви приймаєте завершення до цього часу і повертаєте вас до нормального редагування (тобто командний рядок виконується не відразу). Ви можете натиснути, TABщоб виконати нормальне завершення, ^G перервати стан, коли ви почали, та ^Dперерахувати відповідність.
zshповедінки. Що саме має статися? На даний момент це запитання звучить так, як ви хочете, щоб вибір був перелічений для кожного натискання клавіші після початкового TAB, але це фактично нічого не завершить. Чи повинна кожна натискання клавіш поводитись так, ніби за нею слідує TAB? Майте на увазі, що це означатиме зовсім небагато зворотних відстань для ненавмисних доповнень.