Что делает `zstyle`?

zstyle кажется, что это просто центральное место для хранения и извлечения данных, как альтернатива export . Это правда, или есть еще больше?

3 Solutions collect form web for “Что делает `zstyle`?”

zstyle обрабатывает очевидный стиль управления для системы завершения, но, похоже, охватывает не только это. Например, модуль vcs_info полагается на него для отображения статуса git в вашем приглашении. Вы можете начать с рассмотрения нескольких пояснительных абзацев в man zshmodules в разделе zstyle .

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

В Zsh Book есть хорошая главу на zstyle , а также подробно объясняется ее различные области.

Вы можете использовать grep в каталоге .../Completion/ в вашей системе, чтобы узнать, как некоторые из этих файлов используют zstyle . Общее местоположение находится рядом с /usr/share/zsh/functions/Completion/* . Я вижу, что он используется в более чем 100 файлах на моей системе. Пользователи часто имеют zstyle посыпанные вокруг ~/.zshrc . Вот несколько хороших, чтобы добавить к вашему цвету некоторые цвета и описания:

 # Do menu-driven completion. zstyle ':completion:*' menu select # Color completion for some things. # http://linuxshellaccount.blogspot.com/2008/12/color-completion-using-zsh-modules-on.html zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} # formatting and messages # http://www.masterzen.fr/2009/04/19/in-love-with-zsh-part-one/ zstyle ':completion:*' verbose yes zstyle ':completion:*:descriptions' format "$fg[yellow]%B--- %d%b" zstyle ':completion:*:messages' format '%d' zstyle ':completion:*:warnings' format "$fg[red]No matches for:$reset_color %d" zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b' zstyle ':completion:*' group-name '' # Completers for my own scripts zstyle ':completion:*:*:sstrans*:*' file-patterns '*.(lst|clst)' zstyle ':completion:*:*:ssnorm*:*' file-patterns '*.tsv' # ... 

Система завершения делает большую часть полей прозрачными, если вы играете с ней. Попробуйте zstyle :«tab» и вы увидите некоторые опции. Завершить вкладку до следующего двоеточия, и вы увидите следующий набор параметров и т. Д.

Единственное неопределенное описание глупо названного и плохо документированного стиля (z), который я нашел, – это глоссарий « От Bash To The Z Shell»

style

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

также в разделе «Обработка стилей» автор далее уточняет …

С более сложными функциями завершения вы можете позволить настраивать параметры поведения функции с помощью style .

… многие вспомогательные функции ищут стили для вас, поэтому ваша функция будет реагировать на многие стили, если ваша функция не должна ничего делать, в частности. Чтобы получить представление о стилях, просмотренных в определенной ситуации, вызовите функцию _complete_help с числовым аргументом. Обычно вы можете сделать это, нажав Esc 2, а затем Ctrl - x h . Это в первую очередь полезно при настройке завершения, поскольку оно позволяет вам видеть, какие стили ищут и связанный контекст.

Чтобы правильно понять, как работает zstyle , вам сначала нужно понять, что zsh – это модульная программа. От man zshmodules

Некоторые необязательные части zsh находятся в модулях, отдельно от ядра оболочки. Каждый из этих модулей может быть связан с оболочкой во время сборки или может быть динамически связан во время работы оболочки, если установка поддерживает эту функцию. […]

В этом отношении zsh больше похож на интерпретатора, например PHP, где основные встроенные команды определены в «ядре», но другие встроенные команды содержатся в «модулях».
Отлично, тогда что же такое «zstyle»?
zsh, как и другие оболочки, имеет встроенные команды, такие как source , cd или declarezstyle – это просто еще один из этих «встроенных».

Объем встроенных функций и возможностей оболочки

встроенные функции и опции оболочки обычно являются «глобальными» в том смысле, что они обычно (но не всегда) применимы / могут использоваться в любой момент или в контексте всего процесса оболочки, или, другими словами, они обычно применяются к zsh и всем подсистемам (модули). Обратите внимание, что это применяется, если оболочка вызывается как интерактивный или неинтерактивный интерпретатор.
Так, например, вы можете использовать встроенный source или cd или параметр оболочки «globstar» будет действительным, будь то в командной строке или в выражении case в неинтерактивном скрипте или в функции в том же скрипте.
В отличие от другого ответа выше, zstyle не является встроенным, специфичным для модуля «compsys» (система завершения), zstyle является «глобальным» встроенным.

zstyle определяется модулем zsh/util , это просто означает, что в модуле zsh/util zstyle определен код, который определяет, как разбираться, и «делать» zstyle .
Вы могли бы просто забыть об этом факте, т. Е. Bash не требует, чтобы вы знали, что код для встроенного eval содержится в файле eval.c , но для получения справки для zstyle он помогает узнать, что zstyle является встроенным определенный в модуле zsh/zutil , и к документации для модуля zsh/zutil можно получить доступ, запустив man zshmodules .

Параметры настройки, относящиеся к модулю или функции оболочки

Таким образом, традиционно варианты оболочки обычно были «глобальными», но, как man zshmodules , некоторые необязательные части zsh находятся в модулях , а также много функций zsh написано в функциях оболочки. (аналогично тому, как много больших и дополнительных функций vim было написано в vimscript).
Итак, если вы хотите указать параметры, которые применяются только к этим модулям или функциям, как бы вы это сделали?
Ну, что делает zstyle , дает вам возможность «нацеливать» опции на гораздо более тонкий уровень, чем традиционные «глобальные» варианты оболочки.
zstyle достигает этого через аргумент "pattern"

Пример команды, которая настраивает некоторое необязательное поведение, специфичное для «compsys»:

 zstyle ':completion::complete:lsof:*' menu yes select 

и настройка некоторого необязательного поведения, характерного для «vcs_info»:

 zstyle ':vcs_info:*' actionformats \ '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f ' 

Но это не останавливается на достигнутом, способность zstyles к таргетингу на контексты невероятно мощна, например, вы хотите определить какое-либо поведение / параметры для функции vcs_info , когда вы были репозиторием .git , в отличие от репозитория svn , то вы можете изменить шаблон контекста

 :vcs_info:<svn_or_whatever_SCM_system>:* <style> 

как насчет необязательного поведения для конкретного проекта с помощью svn repo? тогда

 :vcs_info:<svn_or_whatever_SCM_system>:*:repo-root-name <style> 
  • stty: недопустимый целочисленный аргумент: «CCPP»
  • Возможно ли прочитать содержимое файла, который был получен с помощью интерактивной оболочки?
  • zparseopts с ассоциативным массивом в старой версии zsh
  • Глобус с помощью скобок и переменных в zsh
  • Zsh вложенная команда args $ SHLVL ошибка?
  • Определение слова в ZLE (zsh)
  • Почему модификаторы zsh precommand перестают принимать аргументы при цитировании?
  • подсветка синтаксиса zsh для файлов
  • Что означает символ новой строки в PS1 zsh?
  • Почему мой список не преобразуется в массив в сценарии запуска .zshrc?
  • Лучше понять функцию, расширяющую псевдонимы в `zsh`
  • Linux и Unix - лучшая ОС в мире.