zsh 완료 규칙 - 완료 결과에서 파일 확장자를 제거합니다.

zsh 완료 규칙 - 완료 결과에서 파일 확장자를 제거합니다.

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

관련 정보