Zsh — 更聰明的自動修正

Zsh — 更聰明的自動修正

是否可以使 Zsh 停止嘗試更正不屬於當前目錄中的文件的參數,而不完全關閉更正或將其限制為setopt CORRECT(僅更正命令)?

例如,當CORRECT_ALL設定為時setopt,會發生這種情況:

 gris@arefiev: ~% cd srcc 
change srcc to src-nyae? n

到目前為止,一切順利(爭論cd應該是一個文件)。然而,

 gris@arefiev: ~% man zile
change zile to .zile-nyae? 

什麼?我希望它能修正zile到使用選項呼叫的.zile時間。它還嘗試更正 的主機參數、第一個參數等,這真的很煩人。man-Csshsudo

對於每個受影響的命令,我必須求助於拐杖:設定alias man='nocorrect man'等,但顯然這不是最好的解決方案。我也不喜歡CORRECT並且更喜歡拐杖加CORRECT_ALL而不是僅僅CORRECT

Zsh 是zsh 4.3.17 (x86_64-unknown-linux-gnu)Debian sid。

更新: 這是我的.zshrc http://pastebin.com/67mykgRv

答案1

Zsh 附帶了大量的補全,但有少量的更正。有許多命令的完成是有用的,但糾正是沒有用的;例如,完成參數mkdir(在現有目錄中建立目錄)很有用,但不修正它們。這個correct_all選項非常苛刻,因為它會在任何地方開啟校正;不幸的是,只有在提供一組正確的輸入時才可以進行修正。

您可以透過設定來自訂給定命令的更正corrections標籤,並透過製作自訂是否進行校正_correct的一部分matcher-list或不。這些設定與zstyle內建.

答案2

在我看來,您的發行版中缺少一些東西。大多數 ZSH 實作都附帶了大量預先配置的 ZSH 完成設置,這些設置可根據命令和參數位置智慧完成。例如在我的系統上有一個zsh-完成包裹。安裝並正確載入後,man僅使用手冊頁中找到的內容完成,而不是使用文件,ssh僅使用主機名,ssh -l將使用系統使用者名稱完成,但之後ssh -l caleb將返回使用主機名稱等完成。

您應該查看哪些 zsh 軟體包可用以及是否正確載入預設配置。您不必為標準命令設定一堆手動覆蓋,例如您在問題中列出的命令。

相關內容