Zsh

有沒有辦法驗證完成文件?

  • January 7, 2022

我有能夠為 bash、zsh 和 fish 創建完成文件的工具。我通常使用 zsh,但我無法讓這個完成文件在 zsh 上工作。所以作為一個測試,我安裝了fish並為fish創建了完成文件。還有一個我無法上班。所有其他完成在 zsh 和 fish 中都可以正常工作,所以我懷疑該工具會創建一個損壞的完成文件。有沒有辦法檢查完成文件的語法是否有錯誤?

我的回答涉及 zsh(使用“新”完成系統,即在呼叫之後compinit)和 bash。對於魚,請參閱NotTheDr01ds 的答案

如果完成文件中存在語法錯誤,您將在載入完成程式碼時看到一條錯誤消息。在 bash 中,這發生在/etc/bash_completion載入時。在 zsh 中,這發生在第一次呼叫完成函式時。但語法錯誤很少見。大多數錯誤不是語法錯誤,除了呼叫它之外,沒有其他方法可以檢查完成函式是否有效。

如果在生成完成時發生實際錯誤,您將在終端上看到一條錯誤消息。但是,如果程式碼沒有觸發錯誤,但沒有生成所需的完成,則不會顯示任何錯誤。

首先要檢查的是是否實際呼叫了您想要的完成函式。對於 zsh,檢查

echo $_comps[foo]

wherefoo是要完成其選項/參數的命令。對於 bash,請檢查

complete -p foo

如果您的自定義完成功能未載入,請參閱自定義命令的動態 zsh 自動完成自定義 bash 選項卡完成

如果要調試完成程式碼,在 zsh 中,按^X?( Ctrl+X ?) 而不是Tab執行_complete_debug。這會將完成程式碼的跟踪放入一個文件中,您可以通過按 來查看該文件Up Enter

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