実行可能ファイルがある場合は、~/bin/stuff
myに実行可能ファイルを定義して、最初にテキストファイルを私のコマンドの引数として自動補完するようにしますPATH
。.zshrc
zstyle ':completion:*:*:stuff:*' file-patterns '*.txt:all-files' '*:all-files'
ただし、stuff
エイリアス(たとえば)の場合、これはalias stuff=less
機能しなくなり、zshはデフォルトであるため、すべてのファイルをオートコンプリートする必要があるようになります。
ここで文書を見ました。Zsh完成システムエイリアスを拡張する方法について話す以外には何も見つかりませんでした。これは私が望むものではありません。
私考えるこれは、ドキュメント内のパラメータパターンがパラメータパターンであることを示していますが、これは4番目の部分が次のようになることを意味するためですzstyle
。':completion:*:*:-command-:*:commands'
注文する一つではなくニックネーム。私はいつもzshである程度の交換が可能だと思いました。
私の言葉は、私のエイリアスとそれに続く1行の実行可能ファイルを複数作成できることを意味します"$@"
。しかし、そうではありません。エレガント。
答え1
stuff
どちらの場合も、ラベルが破れたと仮定します。
% ls
bar foo.txt
% whence stuff
% alias stuff=less
% zstyle ':completion:*:*:stuff:*' file-patterns '*.txt:all-files'
% stuff
bar foo.txt
対応するzshoptions(1)
ハンドル
COMPLETE_ALIASES
Prevents aliases on the command line from being internally sub-
stituted before completion is attempted. The effect is to make
the alias a distinct command for completion purposes.
だから
% setopt COMPLETE_ALIASES
% stuff foo.txt
それ以外の場合は、別名はすでに異なるものです。
副作用を確認するには、この変更が完了またはスタイル設定のないエイリアスの完成を中断しないことを確認する必要があります。
% setopt COMPLETE_ALIASES
% whence foo
% unfunction _foo
unfunction: no such hash table element: _foo
% alias foo=ls
% foo (eval):1: command not found: _foo
したがって、COMPLETE_ALIASES
セットを使用するときは、各エイリアスの完成を設定したり、エイリアスを適切な場所にリストしたり含めたりする必要がありますcompdef
。
% compdef _ls foo
% foo
...
一方、ラッパーはシェルエイリアスとは異なり、かなりのサイズのシェルをロードまたはロードせずに呼び出すことができ、対話型シェル構成で単純なシステムコールを汚染する可能性があるため、非常にexec
エレガントだと思います。exec(3)
system(3)