zsh cdpath и автозавершение

Мой CDPATH в zsh похож на это:

export CDPATH='.:..:../..'

К сожалению, это означает, что, когда я пытаюсь автоматически заполнить после ввода 'CD', существует слишком много несоответствующих опций автоматического заполнения, в зависимости от того, где я. Например, если я нахожусь в своем корневом каталоге, вводя попытки CD автоматически заполнить каждого пользователя в системе, потому что CDPATH имеет ".."

Существует ли способ сохранить мой CDPATH как показано выше, но иметь автоматическое заполнение для CD, pushd, и т.д. проигнорировать значение CDPATH и автоматически заполнить только на основе текущего каталога?

3
задан 02.04.2011, 02:09

0 ответов

path-directories

Один путь состоит в том, чтобы включить следующие настройки завершения Ваш .zshrc удалить path-directories из источников предложения.

zstyle ':completion:*:complete:(cd|pushd):*' tag-order \
    'local-directories named-directories'

названия группы

Кроме того, или дополнительно, следующие настройки должны отобразить достижение всех соответствующих групп предложений завершения, таким образом, Вы видите, какие каталоги являются локальными каталогами и которые являются предложениями от Вашего cdpath.

zstyle ':completion:*' group-name ''
zstyle ':completion:*:descriptions' format %d

Можно применить стандартные быстрые форматы к этим описаниям, чтобы заставить их выделиться:

zstyle ':completion:*:descriptions' format %B%d%b        # bold
# zstyle ':completion:*:descriptions' format %S%d%s        # invert/standout
# zstyle ':completion:*:descriptions' format %U%d%u        # underline
# zstyle ':completion:*:descriptions' format %F{green}%d%f # green foreground
# zstyle ':completion:*:descriptions' format %K{blue}%d%k  # blue background
# etc.

Это помогает понять другие источники вполне немного, по моему опыту.


Примечание 1: zsh имеет два представления для переменных типа массив как PATH и CDPATH, из которых вариант нижнего регистра является фактическим массивом. Это означает, что Вы можете:

cdpath=(path/to/dir /path/to/another/dir)

Или, для получения желаемого результата:

cdpath=(.. ../..)

Я лично нахожу это более читаемым, чем разделенный от двоеточия псевдо массив.

Примечание 2: экспорт CDPATH не необходимо, если у Вас нет нескольких программ, которые хотят это набор.

7
ответ дан 07.12.2019, 23:27

Теги

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