Zsh
zsh 完成:從特定目錄獲取文件名
好的,一點背景知識:我使用的是 Mac,並且我盡可能在 CLI 中進行操作。
特別是,我經常彈出一個 U 盤,
cp
或者mv
一個文件過來,然後立即希望彈出(解除安裝和斷開連接)它。這通常可以通過幾次擊鍵來完成,除了解除安裝它,這需要(在 10.7 中)進入一個空的桌面空間(通常至少兩個空間之外),選擇磁碟,然後按“command-e”。坦率地說,這個解除安裝過程是該過程中最耗時和最乏味的部分,相差幾個數量級。簡單地打字會更加自然和高效,比如:
ej<tab> J<tab>
假設我的 U 盤安裝在 /Volumes/Jefferson。我希望從我的 6 次擊鍵中得到以下資訊:
eject /Volumes/Jefferson
這應該執行命令:
diskutil unmount /Volumes/Jefferson
所以,我寫了一個不錯的小函式:
eject() { diskutil unmount /Volumes/$1 }
以及與之配套的完成功能:
compdef '_files -g "/Volumes/*"' eject
然而,這有一個問題。該
_files
函式生成完整路徑。現在,我可以將“彈出”函式中的行更改為diskutil unmount $1
,然後一切正常,但是我無法鍵入掛載點名稱的第一個字母,因為路徑以 /Volumes/ 開頭。例如,如果我鍵入J<tab
,我將自動完成 PWD 中的文件。我必須輸入/Volumes/J<tab>
才能獲得所需的完成。那麼,是否有一個完成功能可以從預定義的特定位置獲取文件名,而不是生成完整路徑?
我真的很想把它減少到 6 次擊鍵。
_files -W /Volumes
請參閱 的文件
_path_files
。