如何像在 Ubuntu bash 中一样启用 zsh 包建议?

如何像在 Ubuntu bash 中一样启用 zsh 包建议?

我正在慢慢地从 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 安装中)似乎未设置。虽然可能有更好的解决方案,但我看不出有什么理由不简单地将函数复制bashzsh(当然,适当更改名称):

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或其他适当的初始化文件中。

相关内容