zsh 별칭에 대한 zstyle 완성 기본 설정을 어떻게 정의합니까?

zsh 별칭에 대한 zstyle 완성 기본 설정을 어떻게 정의합니까?

실행 파일이 있는 경우 ~/bin/stuffmy 에 실행 파일을 정의 하여 먼저 텍스트 파일을 내 명령에 대한 인수로 자동 완성하도록 PATH할 수 있습니다 ..zshrc

zstyle ':completion:*:*:stuff:*' file-patterns '*.txt:all-files' '*:all-files'

그러나 stuff별칭(예를 들어)인 경우 alias stuff=less더 이상 작동하지 않으며 zsh는 기본값이기 때문에 모든 파일을 자동 완성해야 하는 것처럼 가장합니다.

여기 문서를 살펴봤습니다.Zsh 완성 시스템별칭을 확장하는 방법에 대해 이야기하는 것 외에는 아무것도 찾지 못했습니다. 이는 제가 원하는 것이 아닙니다.

생각하다이는 문서에 매개변수 패턴이 매개변수 패턴이라고 나와 있지만 이는 네 번째 부분이 다음과 같아야 함을 의미하기 때문 zstyle입니다 .':completion:*:*:-command-:*:commands'주문하다하나보다는별명. 나는 항상 zsh에서 어느 정도 상호 교환이 가능하다고 생각했습니다.

내 말은 내 별칭과 그 뒤에 오는 한 줄짜리 실행 파일을 여러 개 만들 수 있다는 뜻입니다 "$@". 하지만 그렇지 않습니다.우아한.

답변1

stuff두 경우 모두 라벨이 으깨졌다고 가정합니다.

% ls
bar     foo.txt
% whence stuff
% alias stuff=less
% zstyle ':completion:*:*:stuff:*' file-patterns '*.txt:all-files'
% stuff
bar      foo.txt

해당 손잡이 zshoptions(1)

COMPLETE_ALIASES
    Prevents aliases on the command line from being internally sub-
    stituted before completion is attempted. The effect is to make
    the alias a distinct command for completion purposes.

그래서

% setopt COMPLETE_ALIASES
% stuff foo.txt

그렇지 않으면 별칭이 이미 다른 것입니다.

부작용을 확인하려면 이 변경으로 인해 완성 또는 스타일 구성이 없는 별칭의 완성이 중단되지 않는지 확인해야 합니다.

% setopt COMPLETE_ALIASES
% whence foo
% unfunction _foo
unfunction: no such hash table element: _foo
% alias foo=ls
% foo (eval):1: command not found: _foo

따라서 COMPLETE_ALIASES집합을 사용할 때 각 별칭에 대한 완성을 설정하거나 별칭을 적절한 위치에 나열하거나 포함해야 할 수도 있습니다 compdef.

% compdef _ls foo
% foo
...

반면에 래퍼는 쉘 별칭과 달리 상당한 크기의 쉘을 로드하거나 로드하지 않고 호출할 수 있고 대화형 쉘 구성으로 간단한 시스템 호출을 오염시킬 수 있기 때문에 매우 exec우아하다고 생각합니다.exec(3)system(3)

관련 정보