По умолчанию механизм завершения 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.