OK、少し背景があります。私はMacを使用しており、CLIで可能な限り多くのことを行っています。
特に、私は頻繁にUSBスティック、ファイルをcp
またはmv
でポップし、すぐにそれを取り出します(アンマウントして切断します)。これは通常、数回のキーストロークで実行できます。ただし、マウントを解除するには、(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<tab
と入力すると、PWD内のファイルのオートコンプリートが取得されます。目的の補完を取得するには、/Volumes/J<tab>
と入力する必要があります。
それで、完全なパスを生成するのではなく、事前定義された特定の場所からファイル名を取得する完了関数はありますか?
これを6回のキーストロークに減らしたいと思います。
_files -W /Volumes
_path_files
のドキュメントを参照してください。