zsh 中 bash 的替代品?

Akh*_*hil 7 shell bash zsh autocomplete

我最近从 bash 转向了 zsh。

当我运行时complete -f _ssh sshrc它显示

zsh: command not found: complete
Run Code Online (Sandbox Code Playgroud)
  • zsh 中bash 的替代方案是什么complete

  • 如何在 zsh shell 中添加别名命令到自动补全?

Gil*_*il' 6

\n

我假设您正在使用 \xe2\x80\x9cnew 完成系统\xe2\x80\x9d ( compinit),如果没有看到下面。

\n

默认情况下,zsh 在执行补全之前会扩展别名,因此如果sshrc是带有一些额外选项的别名ssh,您将获得开箱即用的补全。但如果sshrc是函数或脚本,则需要解释如何完成它。

\n

要使命令使用特定函数,请使用该compdef函数

\n
compdef _ssh sshrc\n
Run Code Online (Sandbox Code Playgroud)\n

大多数补全函数都不会遇到一个额外的困难_ssh:它根据命令名称,或更准确地说根据 \xe2\x80\x9c 服务名称\xe2\x80\x9d 来执行不同的操作。默认情况下是命令名称。如果\n_ssh无法识别命令名称,则它不会提供任何补全。

\n

sshrc像 一样完成ssh,请直接指示 zsh 执行此操作。这不仅设置了sshrc要完成的_ssh功能,而且还声明了服务名称,以便sshrc正常工作。ssh_ssh

\n
compdef sshrc=ssh\n
Run Code Online (Sandbox Code Playgroud)\n

在引擎盖下,这执行

\n
_comps[sshrc]=$_comps[ssh]\n_services[sshrc]=ssh\n
Run Code Online (Sandbox Code Playgroud)\n

zsh 中的补全系统

\n

Zsh 有三种补全机制:\xe2\x80\x9cold-style\xe2\x80\x9d 补全compctl\xe2\x80\x9cnew-style\xe2\x80\x9d 补全(在 1990 年代引入,所以它\'这不完全是新奇的),还有一个用于 bash 补全的兼容层

\n

默认情况下,zsh 使用旧的完成系统,以实现向后兼容性。但任何在新的补全系统可用后开始使用 zsh 的人都应该使用它。新用户向导可以将必要的行添加到您的配置文件中。如果您没有机会运行它,或者您想重新运行它,请参阅运行 Zsh 首次使用向导,选择 \xe2\x80\x9c 使用新的完成系统。\xe2\x80\x9d,调整根据需要进行设置,然后确认更改直至保存。

\n

如果你输入bashcompinit你的.zshrc,它定义了一个complete与 bash 大部分兼容的函数。兼容性并不完美,但足以运行人们用自己的程序编写和分发的大多数完成功能。

\n

PS 作为 zsh 的新用户,您可能对我对 bash 和 zsh 之间差异的概述感兴趣。

\n