'zstyle'は何をしますか?

'zstyle'は何をしますか?

zstyleexport-ingシェル引数に代わるように、データを保存して検索する中央の場所のようです。これは本当ですか、それとももっとありますか?

答え1

zstyle完成システムの明らかなスタイル制御を扱うが、それ以上を扱うようだ。たとえば、このvcs_infoモジュールはプロンプトでgit状態を表示するためにそれを使用します。man zshmodulesこのセクションzstyleのいくつかの説明段落を見ながら始めることができます。

呼び出すと、どの設定が適用されるかを確認できます。これは有益かもしれません。

これzstyleさまざまな分野を詳しく説明する良い章処理もあります。

.../Completion/システムのディレクトリをgrepして、これらのファイルの一部がどのように使用されているかを確認できます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»と、いくつかのオプションが表示されます。 Tabを押して次のコロンを完成すると、次のオプションセットなどが表示されます。

答え2

どのように機能するかを理解するには、zstyleまずzshがモジュラープログラムであることを理解する必要があります。 ~からman zshmodules

zshの一部のオプション部分は、シェルのコアとは別にモジュールにあります。これらの各モジュールはビルド時にシェルに接続するか、インストールでこの機能をサポートしている場合は、シェルの実行中に動的に接続できます。 [...]

この点で、zshはメインの組み込みコマンドが「コア」モジュールで定義されていますが、他の組み込みコマンドは「モジュール」に含まれているPHPに似たインタプリタに似ています。
さて、それでは「zstyle」とは何ですか? zshには、または - これらの「組み込みコマンド」の別のものなど、他のシェルなどの組み込み
コマンドがあります。sourcecddeclarezstyle

組み込み機能とシェルオプションの範囲

組み込みオプションとシェルオプションは、通常(常にではありません)、シェルプロセス全体でいつでも、またはコンテキストに適用/使用できるという意味で「グローバル」です。つまり、通常はzshとすべてのサブシステムに適用されます。 (モジュール)。これは、シェルが対話型または非対話型インタプリタとして呼び出されるかどうかに関係なく適用されます。したがって、たとえば、コマンドプロンプト、非対話型スクリプトの文、または同じスクリプトの関数で組み込みまたは
シェルオプション "globstar"を使用できます。上記の他の答えとは異なり、「compsys」(完成システム)モジュールに固有の組み込み機能ではなく、「グローバル」組み込み機能です。 sourcecdcase
zstylezstyle

zstylemoduleとして定義されると、zsh/utilこれは単に解析方法を定義するコードを意味し、「do」はモジュールで定義されzstyleます。また、bashでは、組み込み関数のコードがファイルに含まれているという事実を知る必要はありませんが、これの助けを得るためには、これが組み込み関数であることを知ることが役立ちます。これはモジュールで定義されており、このモジュールのドキュメントを実行してアクセスできます。 zsh/zutil
evaleval.czstylezstylezsh/zutilzsh/zutilman 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.gitsvn

:vcs_info:<svn_or_whatever_SCM_system>:* <style>

リポジトリを含む特定のプロジェクトに対するオプションの動作はどうですかsvn?それから

:vcs_info:<svn_or_whatever_SCM_system>:*:repo-root-name <style>

答え3

ただ漠然と意味がある私が見つけた愚かな名前と間違って文書化された「(z)スタイル」の説明 - 用語集BashからZ Shellまで

style

zshスタイルメカニズムは、完成したシステムやエディタウィジェットなどの機能を使用するシェルプラグインを構成する柔軟な方法です。変数とは異なり、状況によって異なり、シェルオプションとは異なり、値を持つことができます。メカニズムはコマンドスタイルに基づいています。

また、「処理スタイル」セクションで作家詳しく説明しましょう...

より複雑な完成機能の場合は、関数の動作のさまざまな側面を構築するために使用できますstyle

...多くのヘルパー関数がスタイルを見つけるので、関数は特定の操作を行わなくても複数のスタイルに反応できます。特定の状況でどのスタイルを見つけるべきかを知るには、数値引数で_complete_help関数を呼び出します。通常、Esc2を押してからを押してこれを実行できますCtrl-x h。これは、どのスタイルが照会されたかと関連するコンテキストを確認できるため、構成が完了したときに主に役立ちます。

答え4

ZSHの最も残念なことの1つは、マニュアルページでさまざまなコマンドを見つけることができる場所を見つけることです。この例では、文書は次のようになります。スタイルman zshmodulesまたはで見つけることができます。ここでオンライン

この組み込みコマンドは、スタイルの定義と検索に使用されます。スタイルは名前と値のペアで、値は任意の数の文字列で構成されます。パターンと一緒に保存され、パターンと比較される「コンテキスト」という文字列を提供することによってルックアップが実行されます。最初に一致するパターンの保存定義を返します。

関連情報