비밀번호 관리자 스크립트에 대한 간단한 zsh 완료 규칙을 만들려고 합니다 pass
.
pass
비밀번호를 디렉토리 구조에 저장하며 파일 자체는 .gpg
파일입니다.
$HOME/passwords
주어진 경로에서 디렉터리와 파일을 완성 하여 디렉터리 이름만 완성하고 파일 이름은 .gpg
확장자 없이 완성하고 싶습니다.
다음 규칙은 디렉터리 이름을 올바르게 완성합니다.
#compdef pass
_pass() {
_arguments '1: :->directory'
case $state in
directory)
_directories -W $HOME/passwords
;;
esac
}
하지만 파일 이름은 전체 이름으로 완성됩니다 foo.gpg
. 즉, .
확장자 없이 파일을 완성하려면 어떻게 해야 합니까 .gpg
?
답변1
기본 아이디어는 파일을 _files -g '*.gpg(:r)'
완성 *.gpg
하되 확장자를 제거하는 것입니다.r
기록 수정자로 통과글로벌 한정자. 그러나 성공적인 완료 후에 자동으로 공백이 삽입되지는 않습니다.
그러니 전화해_path_files
디렉토리와 파일에 대해 별도로 명시 적 으로 적절한 접미사( /
또는 공백)를 추가합니다.-S
_path_files
compadd
.
_path_files -W $HOME/passwords -g '*(/)' -S /
_path_files -W $HOME/passwords -g '*.gpg(:r)' -S ' '