일부 tcsh 완료 설정을 zsh로 마이그레이션하려고 하는데 문서에서 약간의 내용을 잃어버렸습니다. 내가 원하는 것은 두 가지 방법 중 하나로 논쟁을 완성하는 것입니다. 현재 완성하려는 단어에 a가 포함되어 있지 않으면 /
문자열 집합 중 하나여야 합니다. 포함되어 있는 경우 /
디렉터리여야 합니다.
이것:
_foo() {
_arguments -C '1:Name:(Name1 Name2 Name3)' '1:Directory:_path_files -/'
}
동일한 매개변수를 두 번 지정할 수 없으므로 작동하지 않습니다. 나는 그것을 가지고 놀았 _regex_arguments
지만 의미있는 행동을 얻지 못해서 뭔가 빠진 것 같습니다.
답변1
나는 결국 :
#compdef foo
_foo() {
local curcontext="$curcontext" state line
typeset -A opt_args
_arguments -C '-a' '-b' '-c' '-d' '1: :->name'
case $state in
name)
case $words[2] in
*/*)
_arguments '*:directory:_path_files -/'
;;
*)
_arguments '*:name:(Name1 Name2 Name3)'
;;
esac
esac
}
_foo "$@"
그러나 이것이 최선의 해결책인지는 확실하지 않습니다. 특히 일부 예제의 사용법을 복사했지만 $words
문서에서는 찾지 못했습니다.