Zsh auto complete предлагает полные функции (_git _vim и т. Д.)


9

У меня есть небольшое раздражение от того, как zshделаются полные предложения для моих команд.

Если я наберу начало команды, которую я не установил, и нажму, tabона предложит функцию завершения, которая установлена.

Допустим, я хочу выполнить, vimно он не установлен, он предложит _vim.

Есть ли способ отключить это? Или я сделал что-то не так в моей настройке?

Все мои точечные файлы являются публичными на 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.