回答:
zstyle
補完システムの明白なスタイル制御を処理しますが、それだけではありません。たとえば、vcs_info
モジュールはプロンプトにgitステータスを表示するためにこれに依存します。あなたには、いくつかの説明の段落を見ることによって始めることができるman zshmodules
でzstyle
セクション。
これを呼び出すだけで、有効な設定を確認できます。これは有益な場合があります。
Zshのブックは、上の素敵な章の治療を持って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»
してみると、いくつかのオプションが表示されます。次のコロンまでタブ補完すると、次のオプションセットなどが表示されます。
どのように機能するかを適切に理解するにzstyle
は、まずzshがモジュール式プログラムであることを理解する必要があります。からman zshmodules
zshの一部のオプション部分は、シェルのコアとは別のモジュールにあります。これらの各モジュールは、ビルド時にシェルにリンクするか、インストールがこの機能をサポートしている場合、シェルの実行中に動的にリンクできます。[...]
この点で、zshはPHPのようなインタープリターに似ており、メインの組み込みコマンドは「コア」モジュールで定義されていますが、他の組み込みコマンドは「モジュール」に含まれています。
それでは、「zstyle」とは何ですか?
zshは、他のシェルと同様に、などの組み込みコマンドを持っていますsource
。cd
またはdeclare
- zstyle
は、これらの「組み込み」の別の1つです。
ビルトインとシェルオプションは通常、シェルプロセス全体でいつでもまたはコンテキストで一般的に(常にではないが)適用/使用できるという意味で「グローバル」です。つまり、一般的にzshとすべてのサブシステムに適用されます(モジュール)。これは、シェルが対話型または非対話型のインタープリターとして呼び出されるかどうかに適用されます。
だから、例えばあなたは、組み込みの使用できるsource
かcd
またはシェルオプション「globstarを」コマンドでプロンプトまたは内かどうかを有効となりますcase
非対話型スクリプト内またはその同じスクリプト内の関数内のステートメント。
上記の別の答えに反してzstyle
、「compsys」(完了システム)モジュールに固有のビルトインでzstyle
はなく、「グローバル」ビルトインです。
zstyle
はzsh/util
モジュールによって定義されます。これは単に、解析方法を定義するコードと「do」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>
私が見つけた愚かな名前で、文書化されていない「(z)スタイル」の漠然と意味のある唯一の説明は、From Bash To The Z Shellの用語集から来ています。
style
では
zsh
、スタイルメカニズムは、補完システムやエディターウィジェットなどの機能を使用するシェルアドオンを柔軟に構成する方法です。変数とは異なり、異なるコンテキストで異なる場合があり、シェルオプションとは異なり、値を取ることができます。このメカニズムは、コマンドスタイルに基づいています。
また、「スタイルの処理」セクションで、著者はさらに詳しく説明します...
より洗練された補完関数では、次を使用して関数の動作の側面を構成できるようにすることができます。
style
。...多くのヘルパー関数がスタイルを検索するため、関数は特に何もすることなく、多くのスタイルに反応します。特定の状況で検索されたスタイルのアイデアを得るには、数値引数で_complete_help関数を呼び出します。通常、あなたは押すことでこれを行うことができますEsc2が続きますCtrl
-
x h。これは、どのスタイルが検索され、関連するコンテキストを確認できるため、補完を構成するときに主に役立ちます。
ZSHで最もイライラすることの1つは、manページのさまざまなコマンドの場所を見つけることです。この場合、zstyleのドキュメントは、man zshmodules
またはオンラインで見つけることができます。
この組み込みコマンドは、スタイルの定義と検索に使用されます。スタイルは名前と値のペアであり、値は任意の数の文字列で構成されます。それらはパターンと一緒に保存され、ルックアップはパターンと比較される「コンテキスト」と呼ばれる文字列を与えることによって行われます。最初に一致したパターン用に保存された定義が返されます。
zshスペースには良い例が非常に不足しており、ドキュメンテーションはあいまいです。Preztoがzstyle をどのように使用するかを見て、ドキュメントを読んでいくつかのことを試してみました。zstyleは主に補完で使用されるようですが、実際には、昔ながらの環境変数よりも洗練された方法でデータを保存するのに本当に適しています。
この要点は、zstyleを使用して情報を保存および取得する方法を示しています。
# reference: http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fzutil-Module
# list all zstyle settings
zstyle -L
# set a string value
zstyle :example:favorites fruit apple
# set an explicit string value
zstyle -s ':example:favorites' 'computer' 'apple'
# assign new $fav variable with -g
zstyle -g fav ':example:favorites' fruit && echo $fav
# be explicit about the assignment data type:
# -a: array, -b: boolean, -s: string
zstyle -b ':example:favorites:vegtable' 'broccoli' no
# test with -t
if zstyle -t ':example:favorites' 'fruit' 'apple'; then
echo "an apple a day keeps the dr. away"
fi
if ! zstyle -t ':example:favorites:vegtable' 'broccoli' 'no'; then
echo "Broccoli is the deadliest plant on Earth - why, it tries to warn you itself with its terrible taste"
fi
# delete a value with -d
zstyle -d ':example:favorites' 'computer'
# list only zstyle settings for a certain pattern
zstyle -L ':example:favorites*'