Динамічно оновити список завершення в zsh


13

Я вважаю, що списки результатів zsh для Tabзавершення є досить корисними, проте я хотів би трохи змінити їх поведінку:

Вони повинні з’являтися, коли я Tabвперше, а потім динамічно оновлююсь із кожним доданим новим листом. Поведінка за замовчуванням полягає в тому, що пропозиції повторно оцінюються, коли ви Tabзнову, я хочу зберегти це повторне натискання клавіші. ( Оновлення. Але перераховуйте лише можливі доповнення, він не повинен автоматично змінювати мій фактичний рядок підказки, навіть якщо залишився лише один варіант.)

Чи є спосіб досягти такої поведінки?


Ви можете заглибитися в налаштування zshповедінки. Що саме має статися? На даний момент це запитання звучить так, як ви хочете, щоб вибір був перелічений для кожного натискання клавіші після початкового TAB, але це фактично нічого не завершить. Чи повинна кожна натискання клавіш поводитись так, ніби за нею слідує TAB? Майте на увазі, що це означатиме зовсім небагато зворотних відстань для ненавмисних доповнень.
Пет

@ user112553 Перший варіант: У цьому сенсі він насправді не повинен вести себе як повторний ТАБ. Я просто хочу, щоб список пропозицій динамічно коригувався.
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):

інкрементальне-повне слово
Це дозволяє поступово завершити слово. Після запуску цієї команди після кожного введеного символу може бути показаний список варіантів завершення, який ви можете видалити за допомогою ^Hабо DEL. Якщо натиснути return, ви приймаєте завершення до цього часу і повертаєте вас до нормального редагування (тобто командний рядок виконується не відразу). Ви можете натиснути, TABщоб виконати нормальне завершення, ^G перервати стан, коли ви почали, та ^Dперерахувати відповідність.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.