我想为 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)"
- 重新启动你的外壳。
- 完毕!