zsh完了:特定のディレクトリからファイル名を取得する

zsh完了:特定のディレクトリからファイル名を取得する

わかりました、いくつかの背景知識:私はMacを使用し、可能な限りCLIですべてのことを行います。

特にUSBスティックcpmvファイルを挿入した後、すぐに取り出し(マウント解除および接続解除)したい場合が多いです。これは、マウント解除を除いて、通常は数回のキーストロークで行うことができます。これを行うには(10.7で)空のデスクトップスペース(通常少なくとも2つのスペースが離れている)に入り、ディスクを選択して「command-e」を押す必要があります。正直なところ、この除去プロセスは、プロセス全体の中で最も時間がかかり、退屈な部分です。

次のように入力する方が自然で効率的です。

ej<tab> J<tab>

私のUSBスティックが/ Volumes / Jeffersonにマウントされているとしましょう。 6回のキーストロークで予想される結果は次のとおりです。

eject /Volumes/Jefferson

次のコマンドを実行する必要があります。

diskutil unmount /Volumes/Jefferson

だから私は素晴らしい小さな関数を書いた。

eject() {
    diskutil unmount /Volumes/$1
}

これに似た完成関数もあります:

compdef '_files -g "/Volumes/*"' eject  

しかし、問題があります。この_files関数はフルパスを生成します。これで、「eject」機能の行を次に変更でき、diskutil unmount $1すべてが機能しますが、パスが/ Volumes /で始まるため、マウントポイント名の最初の文字を入力できません。たとえば、と入力すると、J<tabPWDはファイルを自動補完します。/Volumes/J<tab>希望の完成を達成するには、入力する必要があります。

もしそうなら、フルパスを作成するのではなく、事前定義された特定の場所からファイル名を取得できる完成関数はありますか?

キー入力の回数を6個に減らしたいです。

ベストアンサー1

_files -W /Volumes

文書を見る_path_files

おすすめ記事