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回のキーストロークまで下げたいと思っています。