Zsh

zsh 完成:從特定目錄獲取文件名

  • February 17, 2013

好的,一點背景知識:我使用的是 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

引用自:https://unix.stackexchange.com/questions/64984