함수에 지정된 정확한 순서로 완성 후보를 채우고 싶습니다. 내가 이해한 바로는 -o nosort
이것이 효과가 있어야 하지만 예상대로 작동하지 않습니다. 아주 기본적인 것이 빠졌나 봐요. 저게 뭐에요?
autoload -Uz compinit && compinit -u
compdef _foo foo
_foo() {
compadd -o nosort -- ccc aaa bbb
}
% foo <Tab>
aaa bbb ccc
# Want: ccc aaa bbb
답변1
이것이 왜 필요한지 확실하지 않지만 추가팀 이름via -J the-group-name
또는 -V the-group-name
(약어 -J the-group-name -o nosort
)가 유효합니다. 그래서:
compadd -V 'foo operands' -- ccc aaa bbb
나는 완성 시스템의 세부적인 작동을 이해하기 위해 실제로 노력한 적이 없습니다. 일부 사용자 정의 완성자를 정의하려고 할 때 일반적으로 zsh에서 제공하는 완성자를 예로 봅니다. grep -rw -- nosort $fpath
이를 사용하는 일부 완성자는 다음과 같습니다 . 이렇게 하면 functions -t one-of-those-completers
해당 완성자를 추적하고 해당 완성자에 대해 compadd가 호출되는 방법을 보여줍니다.