24

我刚刚从 Bash 迁移到 Zsh,但我遇到了一些问题。在 Ubuntu 系统上的 bash 中,当我键入一个不存在的命令的名称时,Bash 会在 apt 数据库中搜索匹配的命令名称并打印出提供该命令的包名称。这是一个非常有用的功能,所以我想知道是否可以使用脚本或其他东西在 Zsh 中实现类似的功能?

这是一个例子:

$>xmms2
The program 'xmms2' is currently not installed.  You can install it by typing:
sudo apt-get install xmms2-client-cli

或者如果命令不完全匹配:

$>xmms
No command 'xmms' found, did you mean:
Command 'lmms' from package 'lmms' (universe)
Command 'xmms2' from package 'xmms2-client-cli' (universe)
Command 'xmds' from package 'xmds' (universe)
Command 'xdms' from package 'xdms' (universe)
4

2 回答 2

22

正如 Michał Politowski 所建议的,我将回答我自己的问题并将其标记为已解决:)

要在 zsh 中获得此功能,请安装一个名为“command-not-found”的包(我不知道其他发行版,但在 Ubuntu 中它位于存储库中)。

注意:在 Ubuntu 12.04 中默认安装此软件包。

sudo apt-get install command-not-found

然后你需要编辑你的 .zshrc 然后在文件 /etc/zsh_command_not_found 中通过在你的 .zshrc 中添加以下行来获取源代码

源 /etc/zsh_command_not_found

于 2012-03-26T15:55:17.867 回答
0

在 MacOs 上,这是brew公式 ;)

brew tap homebrew/command-not-found

并在底部添加~/.zshrc

HB_CNF_HANDLER="$(brew --repository)/Library/Taps/homebrew/homebrew-command-not-found/handler.sh"
if [ -f "$HB_CNF_HANDLER" ]; then
source "$HB_CNF_HANDLER";
fi

完整参考: https ://github.com/Homebrew/homebrew-command-not-found

于 2021-09-17T09:35:32.450 回答