`zstyle`は何をしますか?


23

zstyleexport-ingシェルパラメータの代わりのように、データを格納および取得するための中心的な場所にすぎないようです。それは本当ですか、それともそれ以上ですか?


6
2つの理由でqを支持しました。a)Googleはとにかくここに私を送ります。b)zstyle には、「スタイル」やオートコンプリートとは何の関係もないように思われるものがたくさんあります。ここでの回答の1つは、この機能のひどい名前の付け方についてもコメントしています。
zaTricky

回答:


19

zstyle補完システムの明白なスタイル制御を処理しますが、それだけではありません。たとえば、vcs_infoモジュールはプロンプトにgitステータスを表示するためにこれに依存します。あなたには、いくつかの説明の段落を見ることによって始めることができるman zshmoduleszstyleセクション。

これを呼び出すだけで、有効な設定を確認できます。これは有益な場合があります。

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»してみると、いくつかのオプションが表示されます。次のコロンまでタブ補完すると、次のオプションセットなどが表示されます。


2
Zshブックへのリンク、およびCompletionディレクトリに関するヒントをありがとう。Zshのマニュアルは機能性が高く、ユースケースと例が非常に軽い
です-shadowtalker

「...機能が重く、ユースケースと例が非常に軽い」-残念ながら、プログラマーによって書かれたほとんどの資料のケースです。
aaaaaa

9

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

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

この点で、zshはPHPのようなインタープリターに似ており、メインの組み込みコマンドは「コア」モジュールで定義されていますが、他の組み込みコマンドは「モジュール」に含まれています。
それでは、「zstyle」とは何ですか?
zshは、他のシェルと同様に、などの組み込みコマンドを持っていますsourcecdまたはdeclare- zstyleは、これらの「組み込み」の別の1つです。

ビルトインとシェルオプションの範囲

ビルトインとシェルオプションは通常、シェルプロセス全体でいつでもまたはコンテキストで一般的に(常にではないが)適用/使用できるという意味で「グローバル」です。つまり、一般的にzshとすべてのサブシステムに適用されます(モジュール)。これは、シェルが対話型または非対話型のインタープリターとして呼び出されるかどうかに適用されます。
だから、例えばあなたは、組み込みの使用できるsourcecdまたはシェルオプション「globstarを」コマンドでプロンプトまたは内かどうかを有効となりますcase非対話型スクリプト内またはその同じスクリプト内の関数内のステートメント。
上記の別の答えに反してzstyle、「compsys」(完了システム)モジュールに固有のビルトインでzstyleはなく、「グローバル」ビルトインです。

zstylezsh/utilモジュールによって定義されます。これは単に、解析方法を定義するコードと「do」zstyleがモジュールで定義されていることを意味しzsh/zutilます。
この事実を忘れることもできます。つまり、bashはeval組み込みのコードがファイルeval.cに含まれていることを知る必要はありませんが、のヘルプを得るには、モジュールで定義された組み込みであるzstyleことを知るのに役立ちます。モジュールのドキュメントには、を実行してアクセスできます。 zstylezsh/zutilzsh/zutilman zshmodules

モジュールまたはシェル関数に固有のオプションの設定

だから、伝統的にシェルのオプションは、一般的に、「グローバル」でしたが、からの説明に従ってman zshmoduleszshのいくつかのオプション部品は、モジュールであり、また、多くの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>

8

私が見つけた愚かな名前で、文書化されていない「(z)スタイル」の漠然と意味のある唯一の説明は、From Bash To The Z Shellの用語集から来ています。

style

ではzsh、スタイルメカニズムは、補完システムやエディターウィジェットなどの機能を使用するシェルアドオンを柔軟に構成する方法です。変数とは異なり、異なるコンテキストで異なる場合があり、シェルオプションとは異なり、値を取ることができます。このメカニズムは、コマンドスタイルに基づいています。

また、「スタイルの処理」セクションで、著者はさらに詳しく説明します...

より洗練された補完関数では、次を使用して関数の動作の側面を構成できるようにすることができます。 style

...多くのヘルパー関数がスタイルを検索するため、関数は特に何もすることなく、多くのスタイルに反応します。特定の状況で検索されたスタイルのアイデアを得るには、数値引数で_complete_help関数を呼び出します。通常、あなたは押すことでこれを行うことができますEsc2が続きますCtrl-x h。これは、どのスタイルが検索され、関連するコンテキストを確認できるため、補完を構成するときに主に役立ちます。


2

ZSHで最もイライラすることの1つは、manページのさまざまなコマンドの場所を見つけることです。この場合、zstyleのドキュメントは、man zshmodulesまたはオンライン見つけることができます

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


これはドキュメントにリンクしているため、最良の回答です。zstyleからの読み方を学ぶためにそれが必要でした。もう1つは、アドレス設定スタイルのみに回答します。
cbarrick

1

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*'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.