실행 파일이 있는 경우 ~/bin/stuff
my 에 실행 파일을 정의 하여 먼저 텍스트 파일을 내 명령에 대한 인수로 자동 완성하도록 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)