Имеются ли inodes устройства в сетевом интерфейсе [дубликат]

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

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

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

Область применения встроенных модулей и опций оболочки

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

zstyle определен модулем zsh/util, это просто означает, что код, определяющий, как разобрать и "сделать" zstyle, определен в модуле zsh/zutil.
С таким же успехом можно забыть об этом факте, т.е. 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 репозиторием? тогда

:vcs_info:<svn_or_whatever_SCM_system>:*:repo-root-name <style>
0
10.12.2014, 14:21
0 ответов

Теги

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