비밀번호 관리자 스크립트에 대한 간단한 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 ' '