내에서는 다음을 제외하고 전역적으로 비활성화 .zshrc
했습니다 .menu select
mpv/mplayer
zstyle ':completion:*' menu select=0
zstyle ':completion::complete:mpv:*' menu yes select
이는 예상대로 작동하지만 메뉴가 호출될 때 미디어 파일만 표시되도록 규칙을 수정하고 싶습니다 mpv
(예: "mp3|mp4|mpg|avi|...").
*
테스트하기 위해 로 변경해 보았지만 *.mp3
작동하지 않았습니다.
규칙을 수정하려면 어떻게 해야 하나요?
답변1
zstyle
완성 설정은 완성이 표시되는 방식에 영향을 주고 완성이 생성되는 방식을 조정할 수 있지만 완성을 생성하는 코드를 결정하지는 않습니다. 코드는 또는 이에 상응하는 것을 사용하여 설정 compdef
됩니다 compctl
.
미디어 파일만 완성 파일로 지정하려면 다음을 mpv
호출하세요 .compctl
.zshrc
compctl -/ -g '*.(#i)(mp3|mp4|mpg|avi)' mpv
이 -/
옵션은 다른 완성과 함께 디렉토리도 완성함을 의미합니다(그렇지 않으면 하위 디렉토리의 파일에 액세스할 수 없습니다). 이 -g
옵션은 완료할 파일을 선택하기 위한 전역 모드를 지정합니다. (#i)
대소문자를 구분하지 않고 일치합니다.
compdef
더 복잡한 완성 선택의 경우 (이 답변의 범위를 벗어나는) 함수를 작성하고 자동 로드 매직을 사용하거나 이를 통해 명령과 연결하십시오. 함수가 완성 생성 방법을 조정하려는 경우 zstyle 스타일을 쿼리할 수 있습니다.
답변2
우리는 지정할 수 있습니다ignored-patterns
zstyle
다음과 같이 추가 줄을 추가합니다.
# append below line
zstyle ':completion::complete:mpv:*:*files' ignored-patterns '^*.(#i)(mp3|mp4|mpg|avi)'
추신: 패턴을 제외한 모든 것과 일치 ^
할 수 있는 "전역 연산자" 이므로 위의 대략적인 의미는 zsh에게 명령의 미디어가 아닌 파일을 무시하도록 요청하는 것입니다 .^x
x
zstyle
mpv
ignored-patterns
패턴 목록. 이러한 패턴 중 하나와 일치하는 시험 완료는 고려 대상에서 제외됩니다. 완료자는
_ignored
완료자 목록에 나타나 무시된 일치 항목을 복원할 수 있습니다. 이는 쉘 매개변수의 보다 구성 가능한 버전입니다$fignore
.참고하시기 바랍니다,
EXTENDED_GLOB
옵션은 완성 기능 실행 중에 설정되므로 '#
', '~
', '^
' 문자는 패턴에서 특별한 의미를 갖습니다.
답변3
두 가지 일을 해야 합니다. (참고: 이것은 추측이 아닙니다. 테스트해본 결과 작동합니다.)
먼저 다음을 file-patterns
정의 해야 합니다 .mpv
.zshrc
zstyle ':completion:*:mpv:*' file-patterns \
'%p.(mp3|mp4|mpg|avi)(#q^-/):globbed-files:"media file"' '*(-/):directories:directory' '*(#q^-/):all-files:file'
이는 Zsh의 완성 시스템이 첫 번째 시도에서 지정된 확장자로 끝나는 파일만 완성하도록 지시합니다(또는 활성화된 경우 "Media Files" 헤더로 group-name
). 실패할 경우에만 디렉토리를 제공합니다. 이 작업도 실패하는 경우에만 다른 유형의 파일이 제공됩니다. ( (#q^-/)
디렉터리가 아닌 (-/)
디렉토리에만 일치합니다.)
하지만 그것만으로는 충분하지 않습니다. 제공된 완성 항목 mpv
(이것을 설치했습니까?)도 URL을 완성으로 제공하려고 시도하기 때문입니다. 미디어 파일을 사용할 수 있을 때 이러한 내용이 표시되지 않도록 하려면 다음을 추가하세요.
zstyle ':completion:*:mpv:*' tag-order 'files'
즉 mpv
, 이 명령의 경우 먼저 파일(위의 모든 항목 포함 file-patterns
)을 제공해야 하며, 실패하는 경우에만 다른 것을 제공해야 합니다.