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_filescompadd.

_path_files -W $HOME/passwords -g '*(/)' -S /
_path_files -W $HOME/passwords -g '*.gpg(:r)' -S ' '

관련 정보