まず、私が以下を持っているとしましょう。
alias foo='path/to/my/program'
私のファイルでは、.zshrc
私はそれのための完成スクリプトを作成しました~/.oh-my-zsh/completions/_foo
。ファイルには次のものがあります。
#compdef foo
_foo() {
echo "hello"
}
_foo
そのため、foo [tab]
シェルで入力すると、次のように表示されると予想しました。
$foo [tab]
hello
しかし、私は得た。
$ foo [tab]_foo
押すとテキストが_foo
出力されますtab
。
この問題を解決するアイデアはありますか?
答え1
これはzshに対する一般的な答えです。わかりません。
デフォルトでは、zsh は完了を試みる前にエイリアスを拡張します。これは一般的に正しいことです。したがって、完成関数をエイリアス名に関連付けるのは、afterなどのエイリアスをバイパスした場合にのみ機能します\foo
Tab。
次のコマンドを使用してこの動作をオフにすることができますsetopt complete_aliases
。ただし、完成が明示的に設定されていないすべてのエイリアスの完成機能は失われます。
特別なケースが必要な場合は、foo
最善の方法はこれを関数に変更することです。
function foo {
path/to/my/program "$@"
}
_foo
印刷される理由は説明されていません。多分何か奇妙なことかもしれません。