Zsh 완료 스크립트가 발견되었지만 실행되지 않았습니다.

Zsh 완료 스크립트가 발견되었지만 실행되지 않았습니다.

먼저, 내가 다음을 가지고 있다고 가정해 봅시다:

alias foo='path/to/my/program'

내 파일에서 .zshrc나는 그것에 대한 완성 스크립트를 만들었습니다 ~/.oh-my-zsh/completions/_foo. 파일에는 다음이 있습니다.

#compdef foo

_foo() {
    echo "hello"
}

_foo

그래서 foo [tab]쉘에서 입력하면 다음과 같이 표시될 것으로 예상했습니다.

$foo [tab]
hello

하지만 난 얻었어

$ foo [tab]_foo

누르면 텍스트가 _foo출력됩니다 tab.

이 문제를 해결할 아이디어가 있습니까?

답변1

이것은 zsh에 대한 일반적인 답변입니다. 모르겠어요 맙소사.

기본적으로 zsh는 완료를 시도하기 전에 별칭을 확장합니다. 이것은 일반적으로 옳은 일입니다. 따라서 완성 함수를 별칭 이름과 연결하는 것은 after 와 같이 별칭을 우회할 때만 작동합니다 \fooTab.

다음 명령을 사용하여 이 동작을 끌 수 있습니다setopt complete_aliases. 그러나 완성이 명시적으로 설정되지 않은 모든 별칭에 대한 완성 기능은 손실됩니다.

특별한 경우를 원할 경우 foo가장 좋은 방법은 이를 함수로 변경하는 것입니다.

function foo {
  path/to/my/program "$@"
}

_foo인쇄되는 이유는 설명되지 않습니다 . 어쩌면 뭔가 이상한 것일 수도 있습니다.

관련 정보