Автоматичне завершення Zsh пропонують повноцінні функції (_git _vim тощо)


9

У мене невеликий роздратування щодо того, як zshробляться повні пропозиції щодо моїх команд.

Якщо я наберу початок команди, яку я не встановив, і натисніть tabїї, то запропонує встановити функцію завершення.

Скажемо, я хочу виконати, vimале він не встановлений, це запропонує _vim.

Чи є спосіб вимкнути це? Або я зробив щось не так у своєму налаштуванні?

Усі мої dotfiles є загальнодоступними github.com/henrikbjorn/castle.


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

Відповіді:


8

За замовчуванням двигун завершення zsh лише намагається додати щось до введеного тексту. Ви налаштували його, щоб спробувати також додати префікс. Простий двигун конфігурації інтерактивного завершення ( compinstall) пропонує це в розділі "відповідне управління → завершення підрядки". Це вставляє такий рядок у ваш .zshrc:

zstyle ':completion:*' matcher-list '' 'l:|=* r:|=*'

У zstyleвбудованих наборах ( в основному) настройка завершення. Стиль matcher-listзавершення - це перелік способів спробувати послідовно, зупиняючись, коли є хоча б одна відповідність. Порожній рядок означає завершення за замовчуванням (лише суфікси). У контроль відповідності INCANTATION l:|=* r:|=*засіб спробувати відповідність префіксів *і суфіксів відповідності *, тобто будь-який префікс і суфікс.

Ви можете заборонити префікси, які починаються _взагалі. Це все ще дозволяє завершити слова, які починаються з _, і завершити додаванням префікса, але префікс може не починатися з _.

zstyle ':completion:*' matcher-list '' 'l:|=[^_]* r:|=*'

Це стосується всіх доповнень, а не лише виконань назв команд. Я не знаю, як обмежити це іменами команд.

Повинен бути спосіб більш точно виключити імена команд, які починаються з цього _, але я не знаю як. Перший початок - із ignored-patternsстилю завершення.

zstyle ':completion:*:*:-command-:*:*' ignored-patterns '_*'       

Це виключає сірники, які починаються з _; однак, якщо немає відповідностей, zsh намагається знову без правил ігнорування. Добре в тому, що якщо команда розпочалася з підкреслення в першу чергу, вона буде виконана в цьому другому проході. Погана частина є те , що ЗШ, таким чином , спробуйте додати підкреслення в будь-якому випадку , якщо немає збігів, тому якщо у вас є viі , viewале не vimпотім , натиснувши Tabпісля viзапропонує viі , viewале не _vim, але якщо ви друкуєте , vimто завершення буде пропонувати _vim.


Дякує, здається, працює, виконуючи одне із вказаних вами рішень, також я дізнався купу про те, як це працює.
Генрік Бьорнсков

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