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

Я склонен делать такого рода вещь (независимо от сервера приложений, операционной системы, и т.д.) на некотором уровне брандмауэра. Это делает rulesets более легкое, чтобы проанализировать и обновить, вместо того, чтобы иметь определенные для сервера правила отказа.

Я предлагаю, чтобы Вы взглянули на Правила о Windows Firewall и видели, можно ли сделать то, что Вы хотите там. Это должно сделать значительно легче проследить путь пакетов и надо надеяться помочь Вам решить свою собственную проблему.

4
задан 25 January 2012 в 01:42
3 ответа

I didn't find such an option, but maybe you are helped, if your completion would be case sensitive. you can set this in your ~/.zshrc:

# Set to this to use case-sensitive completion
CASE_SENSITIVE="true" 
6
ответ дан 3 December 2019 в 03:09

TL;DR

Добавьте это в свой ~/.zshrc

function _parameters() {}

Объяснение:

В системе завершения zsh каждый заполняемый шаблон сопоставляется с некоторой функцией завершения. В случае, когда завершение вызывается в позиции команды (в жаргоне zsh), zsh вызывает функцию, связанную со специальным шаблоном -команда-.

Все шаблоны и функции завершения хранятся в переменной _comps_ в виде ассоциативного массива. Итак, вы можете увидеть, какая функция вызывается для выполнения команд, например:

echo ${_comps[-command-]}

В моем случае это функция _command_names. Если мы взглянем на исходный код этой функции,

whence -f _command_names

, то вы увидите все источники, из которых собраны возможные завершения. Это могут быть встроенные файлы, исполняемые файлы по пути, локальные исполняемые файлы, если префикс завершения содержит косую черту, псевдонимы, функции, задания, зарезервированные слова и, что особенно важно, параметры, включающие переменные среды. Глядя на код _command_names, я вижу, что вопрос о том, следует ли предлагать параметры или нет, не настраивается — функция _parameters вызывается всегда. Функция _parameters также не кажется достаточно настраиваемой.

На данный момент мы знаем достаточно, чтобы рассмотреть несколько решений. Один из них — изменить _command_names и удалить источники parameters:_parameters. Другой способ — сделать функцию _parameters неактивной. Второй вариант выглядит менее подверженным ошибкам, поэтому я рекомендую его.


Обратите внимание, что переопределение функции _parameters также отключает переменные среды завершения в других местах (например, если ввести $ и нажать Tab). Чтобы разрешить заполнение переменных среды в других местах, возможное решение — исправление _parameters вместо переопределения. Вот пример:

autoload +X _parameters # load it for patching latter
functions[_parameters]="
[[ \$curcontext = -command- ]] && return
$functions[_parameters]"

Пропускает обработку переменных среды, если $curcontext, контекст для вызываемой функции завершения, находится в имени программы. Экранирование необходимо, чтобы расширение $curcontext происходило до тех пор, пока не будет выполнена исправленная функция.

1
ответ дан 26 August 2020 в 10:43

Вам нужно скрыть параметры в позиция команды, поэтому используйтеtag-order:

zstyle ':completion:*:-command-:*' tag-order '!parameters'

Часть !parametersговорит скрывать параметры, когда завершение находится в позиции -command-:

! теги...

Строка, начинающаяся с восклицательного знака, определяет имена тегов, которые не следует использовать. Эффект такой же, как если бы были перечислены все другие возможные теги для контекста.

0
ответ дан 19 October 2021 в 16:45

Теги

Похожие вопросы