Bash
在 zsh 中替代 bash 完成?
我最近從 bash 轉到 zsh。
當我執行
complete -f _ssh sshrc
它顯示zsh: command not found: complete
complete
zsh 中 bash 的替代方法是什麼?- 如何在 zsh shell 中向自動完成添加別名命令?
我假設您正在使用“新的完成系統”(
compinit
),如果沒有見下文。預設情況下,zsh 在執行完成之前擴展別名,因此如果
sshrc
是ssh
帶有一些額外選項的別名,您將獲得開箱即用的完成。但如果sshrc
是函式或腳本,則需要說明如何完成。要使命令使用特定功能,請使用以下
compdef
功能:compdef _ssh sshrc
還有一個額外的困難
_ssh
,你不會遇到大多數完成功能:它的行為基於命令名稱,或者更準確地說是基於預設情況下是命令名稱的“服務名稱”。如果_ssh
無法辨識命令名稱,則不提供任何補全。要
sshrc
完成 likessh
,直接指示 zsh 執行此操作。這不僅sshrc
用功能設置完成_ssh
,而且還聲明服務名稱sshrc
以便ssh
正常_ssh
工作。compdef sshrc=ssh
在引擎蓋下,這執行
_comps[sshrc]=$_comps[ssh] _services[sshrc]=ssh
zsh 中的補全系統
Zsh 具有三種補全機制:“舊式”補全
compctl
、“新式”補全(在 1990 年代引入,因此並不完全是新奇的),以及bash 補全的兼容層。預設情況下,zsh 使用舊的完成系統,以實現向後兼容性。但是任何在新的完成系統可用後開始使用 zsh 的人都應該使用它。新使用者嚮導提供將必要的行添加到您的配置文件。如果您沒有機會執行它,或者您想重新執行它,請參閱執行 Zsh first use 嚮導,選擇“使用新的完成系統。”,根據需要調整設置,並確認更改,直到它們’得救了。
如果你
bashcompinit
輸入你的.zshrc
,它定義了一個complete
與 bash 最兼容的函式。兼容性並不完美,但足以執行人們使用自己的程序編寫和分發的大多數補全功能。PS 作為 zsh 的新使用者,您可能會對我對 bash 和 zsh 之間差異的概述感興趣。