Zsh软件包建议

26
我刚从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)

适合发布在superuser.com上。 - Paul R
啊,好的,对不起,我是新来的 :) - Bhaskar Kandiyal
@Paul R 如果这个包不存在,那么这不是一个编程问题吗?@gastly 如果你找到了执行此操作的脚本源代码,我可以将其移植到zsh。 - ZyX
5
我找到了解决方案,功能在Ubuntu中称为“command-not-found”包中。我只需要安装该软件包,并将文件“/etc/zsh_command_not_found”的源代码添加到我的zshrc文件中 :) - Bhaskar Kandiyal
@gastly,你能把你的解决方案写成一个答案并接受它吗?这样问题就有了正确的答案。目前它仍然出现在各种未回答问题的列表中。 - Michał Politowski
精心构思的问题! - Vivek Sadh
2个回答

25

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

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

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

sudo apt-get install command-not-found

然后需要编辑您的 .zshrc 文件,并通过在您的 .zshrc 中添加以下行来源化文件 /etc/zsh_command_not_found

source /etc/zsh_command_not_found


4
只是为了明确一下,我已经安装了command-not-found,并且我所需要的只是将以下内容添加到.zshrc中:source /etc/zsh_command_not_found - Sam

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接