Назад | Перейти на главную страницу

Исключение переменных среды из автозаполнения ZSH

Быстрый пример:

~ $ 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 не работать. Второй вариант выглядит менее подверженным ошибкам, поэтому я рекомендую его.