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. 완벽한!

관련 정보