Быстрый пример:
~ $ wor<TAB>
~ $ WORDCHARS=
WORDCHARS WORKON_HOME WORKON_HOME workon
workon
это желаемая команда. Есть ли способ исключить переменные среды из автозаполнения в ZSH?
Я не нашел такой опции, но, возможно, вам помогут, если ваше завершение будет чувствительным к регистру. вы можете установить это в своем ~/.zshrc
:
# Set to this to use case-sensitive completion
CASE_SENSITIVE="true"
TL; DR
Добавьте это в свой ~/.zshrc
function _parameters() {}
Пояснение:
В системе завершения zsh каждый завершаемый шаблон сопоставляется с некоторой функцией завершения. В случае, когда завершение вызывается в позиции команды (на языке zsh lingo), zsh вызывает функцию, связанную со специальным шаблоном -command-
.
Все шаблоны завершения и функции хранятся в _comps_
переменная как ассоциативный массив. Итак, вы можете увидеть, какая функция вызывается для выполнения таких команд:
echo ${_comps[-command-]}
В моем случае функция _command_names
. Если мы посмотрим на исходный код этой функции,
whence -f _command_names
тогда вы увидите все источники, из которых собраны возможные завершения. Это могут быть встроенные программы, исполняемые файлы на пути, локальные исполняемые файлы, если префикс завершения содержит косую черту, псевдонимы, функции, задания, зарезервированные слова и, что особенно важно, параметры, которые включают переменные среды. Глядя на код _command_names
Я вижу, что следует предлагать параметры или нет, не было сделано настраиваемым - _parameters
функция вызывается всегда. В _parameters
функция также не кажется достаточно настраиваемой.
На данный момент мы знаем достаточно, чтобы рассмотреть несколько решений. Можно было бы изменить _command_names
и удалите parameters:_parameters
источники. Другой - сделать _parameters
не работать. Второй вариант выглядит менее подверженным ошибкам, поэтому я рекомендую его.