Bash

在 zsh 中替代 bash 完成?

  • July 25, 2020

我最近從 bash 轉到 zsh。

當我執行complete -f _ssh sshrc它顯示

zsh: command not found: complete
  • completezsh 中 bash 的替代方法是什麼?
  • 如何在 zsh shell 中向自動完成添加別名命令?

我假設您正在使用“新的完成系統”(compinit),如果沒有見下文。

預設情況下,zsh 在執行完成之前擴展別名,因此如果sshrcssh帶有一些額外選項的別名,您將獲得開箱即用的完成。但如果sshrc是函式或腳本,則需要說明如何完成。

要使命令使用特定功能,請使用以下compdef功能

compdef _ssh sshrc

還有一個額外的困難_ssh,你不會遇到大多數完成功能:它的行為基於命令名稱,或者更準確地說是基於預設情況下是命令名稱的“服務名稱”。如果 _ssh無法辨識命令名稱,則不提供任何補全。

sshrc完成 like ssh,直接指示 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 之間差異的概述感興趣。

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