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 ' '

おすすめ記事