네트워크에서 zsh 자동 완성 와일드 카드 파일 이름을 완성

zsh의 가장 좋아하는 기능 중 하나는 자동 완성입니다. 특히 네트워크 컴퓨터에서 파일 이름을 완성 할 때 특히 그렇습니다. 그러나 와일드 카드 (예 : *)를 포함시켜 원격 시스템에서 자동 완성하는 방법은 무엇입니까?

예를 들어 서버에 file1, file2 및 file3이 있다고 가정합니다. 모든 파일을 로컬 컴퓨터에 복사하고 싶습니다.

scp server:~/fi<tab>

그런 다음 zsh가 올바르게 자동 완성됩니다.

scp server:~/file

하지만 와일드 카드를 사용하려고하면

scp server:~/file*<tab>

모두 나에게 경고음을냅니다 (파일 경로가 로컬이면 올바르게 작동합니다). 이 작업을 수행하는 zsh 옵션 세트가 있습니까?



답변

GLOB_COMPLETE 설정이 이것을 변경해야한다고 생각하십시오.

setopt GLOB_COMPLETE

보낸 사람 man zshoptions:

GLOB_COMPLETE

현재 단어에 글로 패턴이있는 경우 확장 결과로 나오는 모든 단어를 삽입하지 말고 완료와 일치하는 항목을 생성하고 MENU_COMPLETE와 같이 순환하십시오. 일치는 단어 끝에 ‘*’가 추가 된 것처럼 생성되거나 COMPLETE_IN_WORD가 설정 될 때 커서에 삽입됩니다. 이것은 실제로 글 로빙이 아닌 패턴 일치를 사용하므로 파일뿐만 아니라 옵션, 사용자 이름 등과 같은 모든 완료에 작동합니다.

패턴 매처를 사용하는 경우 일치 제어 (예 : 대소 문자 구분 또는 앵커 일치)를 사용할 수 없습니다. 이 제한은 현재 단어에 패턴이 포함 된 경우에만 적용됩니다. GLOB_COMPLETE 옵션을 켜는 것만으로는이 효과가 없습니다.


답변

어떤 이유로 든 scp / ssh의 원격 경로에서 사용될 때 glob 문자를 이스케이프해야합니다.

scp server:~/file\*<tab>

예를 들어 glob 완료를 사용하지 않고 glob를 사용하여 여러 파일을 scp하려는 경우에도 마찬가지입니다.

scp server:~/files/project.\* ~/localdir