我正在慢慢地从 bash 过渡到 zsh,并且几乎喜欢它的每个部分,但有两样东西我真的很想念。其中之一是 snap 补全,见此处: 为 zsh 启用 snap TAB 补全
另一种情况是,你在 Ubuntu 终端中输入一个命令,然后你不会立即得到“哦不!找不到命令!”,而是得到如下信息:
user@computer:~$ inkscape
Command 'inkscape' not found, but can be installed with:
sudo snap install inkscape # version 0.92.4, or
sudo apt install inkscape # version 0.92.4-5ubuntu5
See 'snap info inkscape' for additional versions.
有没有办法在 zsh 中启用此功能?我真的不想再切换回 bash 来使用此功能并实现自动完成功能。
谢谢!
答案1
为了apt 包建议我们可以这样做:
$ sudo apt install command-not-found
$ echo "source /etc/zsh_command_not_found" >> ~/.zshrc
$ exec zsh
答案2
如果你正在使用哦我的天啊,它带有名为的插件command-not-found
,您可以通过编辑~/.zshrc 来启用它,添加command-not-found
到插件列表中。
例如插件=(未找到命令)
答案3
神奇的事情发生在bash
使用一个名为的函数时command_not_found_handle
:
$ declare -f command_not_found_handle
command_not_found_handle ()
{
if [ -x /usr/lib/command-not-found ]; then
/usr/lib/command-not-found -- "$1";
return $?;
else
if [ -x /usr/share/command-not-found/command-not-found ]; then
/usr/share/command-not-found/command-not-found -- "$1";
return $?;
else
printf "%s: command not found\n" "$1" 1>&2;
return 127;
fi;
fi
}
zsh
有一个非常相似的名字command_not_found_handler
:
默认情况下,它(至少在我的 18.04 安装中)似乎未设置。虽然可能有更好的解决方案,但我看不出有什么理由不简单地将函数复制bash
到zsh
(当然,适当更改名称):
command_not_found_handler () {
if [ -x /usr/lib/command-not-found ]
then
/usr/lib/command-not-found -- "$1"
return $?
else
if [ -x /usr/share/command-not-found/command-not-found ]
then
/usr/share/command-not-found/command-not-found -- "$1"
return $?
else
printf "%s: command not found\n" "$1" >&2
return 127
fi
fi
}
您可以将定义放在您的~/.zshrc
或其他适当的初始化文件中。