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
このために、独自の完成関数を書く必要はありません。pytest
Bashの完成を簡単に再利用できます。
- インストールする
argcomplete
:pip install argcomplete
- 以下を次の項目に追加します
.zshrc
。autoload -Uz bashcompinit && bashcompinit eval "$(register-python-argcomplete pytest)"
- シェルを再起動します。
- 完璧!