是否可以使 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
-C
ssh
sudo
對於每個受影響的命令,我必須求助於拐杖:設定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 軟體包可用以及是否正確載入預設配置。您不必為標準命令設定一堆手動覆蓋,例如您在問題中列出的命令。