私は以下を除いてグローバルに無効に.zshrc
しました。menu select
mpv/mplayer
zstyle ':completion:*' menu select=0
zstyle ':completion::complete:mpv:*' menu yes select
これは期待どおりに機能しますが、メニューが呼び出されたときにメディアファイルのみが表示されるようにルールを変更したいと思いますmpv
(例: "mp3|mp4|mpg|avi|...")。
*
テストするためにに変更してみましたが、うまく*.mp3
いきませんでした。
ルールを変更するにはどうすればよいですか?
答え1
zstyle
完成設定は、完成の表示方法に影響し、完成の生成方法を調整できますが、完成を生成するコードを決定するわけではありません。コードは、またはそれに対応するものを使用して設定さcompdef
れますcompctl
。
メディアファイルのみを完成ファイルとして指定するには、次のようにmpv
呼び出します。compctl
.zshrc
compctl -/ -g '*.(#i)(mp3|mp4|mpg|avi)' mpv
この-/
オプションは、他の補完とともにディレクトリも完成することを意味します(そうしないと、サブディレクトリのファイルにアクセスできません)。この-g
オプションは、完了するファイルを選択するためのグローバルモードを指定します。(#i)
大文字と小文字を区別せずに一致します。
compdef
より複雑な完成の選択のために(この答えの範囲外)、関数を作成し、自動ロードマジックを使用するか、それを介してコマンドに関連付けます。関数が完成の生成方法を調整したい場合は、zstyleスタイルを照会できます。
答え2
私達は指定できますignored-patterns
zstyle
次のように追加の行を追加します。
# append below line
zstyle ':completion::complete:mpv:*:*files' ignored-patterns '^*.(#i)(mp3|mp4|mpg|avi)'
PS:パターンを除くすべてと一致することが^
できる「グローバル演算子」なので、上記のおおよその意味は、zshにコマンドのメディアではなくファイルを無視するように要求することです。^x
x
zstyle
mpv
ignored-patterns
パターンリスト。これらのパターンの1つと一致する試験の完了は、検討対象から除外される。完了者は、
_ignored
完了者リストに表示され、無視された一致を復元できます。これはシェルパラメータのより設定可能なバージョンです$fignore
。ご注意ください、
EXTENDED_GLOB
オプションはコンプリート機能の実行中に設定されるため、文字 ''、'#
'~
、'^
' はパターンに特別な意味を持ちます。
答え3
2つのことをする必要があります。 (注:これは推測ではありません。テストしてみるとうまくいきます。)
まず、以下をfile-patterns
定義する必要があります。mpv
.zshrc
zstyle ':completion:*:mpv:*' file-patterns \
'%p.(mp3|mp4|mpg|avi)(#q^-/):globbed-files:"media file"' '*(-/):directories:directory' '*(#q^-/):all-files:file'
これは、Zshの完成システムが最初の試みで指定された拡張子で終わるファイルのみを完成するように指示します(有効になっている場合は「Media Files」ヘッダーでgroup-name
)。失敗した場合にのみディレクトリを提供します。この操作が失敗した場合にのみ、他の種類のファイルが提供されます。 ((#q^-/)
ディレクトリではない(-/)
ディレクトリにのみ一致します。)
しかし、それだけでは十分ではありません。提供された完成品mpv
(これをインストールしましたか?)もURLを完成として提供しようとするからです。メディアファイルが利用可能なときにこれらのコンテンツが表示されないようにするには、次のように追加します。
zstyle ':completion:*:mpv:*' tag-order 'files'
つまりmpv
、このコマンドの場合は、最初にファイル(上記のすべての項目を含むfile-patterns
)を提供し、失敗した場合にのみ別のものを提供する必要があります。