zshオートコンプリートのカスタマイズ

zshオートコンプリートのカスタマイズ

pytestのzshコンプリートを作成したいと思います。

どこから始めるべきですか?私はoh-my-zshを使用しています。

.zshrcから:

fpath=($HOME/.mycompletions $fpath)
autoload -U compinit && compinit -u

$HOME/.mycompletions/_pytest から:

#compdef pytest

_pytest()
{
    cur="${COMP_WORDS[COMP_CWORD]}"
    COMPREPLY=(`pytestcomplete ${cur} 2>/dev/null`)
}
complete -o nospace -F _pytest py.test

ここまでが正しいですか?

pytestcompleteこれでスクリプトを「ただ」書くだけです。

戻り値はどのように見えるべきですか?完成した部分をスクリプトにどのように渡しますか?

つまり、ユーザーがこれを行うと、py.test<TAB>ファイルは最初に完了する必要があります。これにより、py.test tests/my.test.py<TAB>クラス名が完成する必要があります。これにより、py.test tests/my.test.py::TestClass<TAB>メソッド名を完成させる必要があります。

pytestから情報を取得するには、--collect-only現在唯一の問題はzshと完了スクリプトの間を行き来することです。

この方法でできますか?それとも、oh-my-zshプラグインを書く必要がありますか?

答え1

このために、独自の完成関数を書く必要はありません。pytestBashの完成を簡単に再利用できます。

  1. インストールするargcomplete
    pip install argcomplete
    
  2. 以下を次の項目に追加します.zshrc
    autoload -Uz bashcompinit && bashcompinit
    eval "$(register-python-argcomplete pytest)"
    
  3. シェルを再起動します。
  4. 完璧!

関連情報