zsh 的 XCode Command-T 風格自動完成

zsh 的 XCode Command-T 風格自動完成

我剛開始使用 vim 的 Command-T 插件,它非常棒。如果您還沒有聽說過它,它允許您輸入如下內容:

Sb

從清單中選擇 Something.hs-boot

src/project/Control/Whatever/Foobs.hs
src/project/Control/Whatever/Something.hs-boot
src/project/Control/Whatever/Something.hs

等等。

我想知道是否可以在 zsh 中使用類似的自動完成樣式。我知道 shell 補全不可能像 vim 補全那麼廣泛,因為 shell 補全可能不應該在每次鍵入字母時搜索整個系統,但是是否有某種類似的補全,我至少可以類型

s/p/c/w/Sb<tab>

並得到與上方類似的效果?

我聽說 zsh 有一個非常好的可編程自動完成功能,但我的 shell-fu 相當弱。

有人知道如何設定嗎?

答案1

要完成部分路徑,只需初始化完成系統就足夠了(至少在我的系統上,使用zsh v4.3.17):

autoload -U compinit && compinit
zmodload zsh/complist

如果你想要更花俏一點,你可以讓匹配不區分大小寫:

zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'

更新1:

我不知道你是否可以執行 Command-T 風格的自動完成...但是 zsh 必須得到全部在顯示某些內容之前進行匹配,動態執行此操作,尤其是在具有大量子目錄/文件的地方,可能不可行。

但是您可以使用:

**/*thing <Tab>

符合**目前目錄的所有檔案和子目錄。

主意: 如果它不必是最新的文件列表,您可以編寫一個使用輸出的完成函數locate(即預先計算的文件列表)

更新2: https://github.com/junegunn/fzf#fuzzy-completion-for-bash-and-zsh

答案2

另一個有趣的選擇是使用類似的東西法西德

相關內容