Zsh
有沒有辦法驗證完成文件?
我有能夠為 bash、zsh 和 fish 創建完成文件的工具。我通常使用 zsh,但我無法讓這個完成文件在 zsh 上工作。所以作為一個測試,我安裝了fish並為fish創建了完成文件。還有一個我無法上班。所有其他完成在 zsh 和 fish 中都可以正常工作,所以我懷疑該工具會創建一個損壞的完成文件。有沒有辦法檢查完成文件的語法是否有錯誤?
我的回答涉及 zsh(使用“新”完成系統,即在呼叫之後
compinit
)和 bash。對於魚,請參閱NotTheDr01ds 的答案。如果完成文件中存在語法錯誤,您將在載入完成程式碼時看到一條錯誤消息。在 bash 中,這發生在
/etc/bash_completion
載入時。在 zsh 中,這發生在第一次呼叫完成函式時。但語法錯誤很少見。大多數錯誤不是語法錯誤,除了呼叫它之外,沒有其他方法可以檢查完成函式是否有效。如果在生成完成時發生實際錯誤,您將在終端上看到一條錯誤消息。但是,如果程式碼沒有觸發錯誤,但沒有生成所需的完成,則不會顯示任何錯誤。
首先要檢查的是是否實際呼叫了您想要的完成函式。對於 zsh,檢查
echo $_comps[foo]
where
foo
是要完成其選項/參數的命令。對於 bash,請檢查complete -p foo
如果您的自定義完成功能未載入,請參閱自定義命令的動態 zsh 自動完成或自定義 bash 選項卡完成。
如果要調試完成程式碼,在 zsh 中,按
^X?
(Ctrl+X
?
) 而不是Tab
執行_complete_debug
。這會將完成程式碼的跟踪放入一個文件中,您可以通過按 來查看該文件Up
Enter
。