如何解决 __vi_internal_vim_alias: 未找到命令?

如何解决 __vi_internal_vim_alias: 未找到命令?

我最近在我的机器上升级到了 Fedora 33 (Linux 5.9.16-200)。我正在运行 vim 增强版 8.2。当我输入sudo vim(甚至sudo vi)以使用管理员权限编辑文件时,出现以下错误。

sudo: __vi_internal_vim_alias: command not found

我不确定是什么原因造成的。 Vim 无需 sudo 即可正常加载。您能告诉我如何解决这个问题吗?谢谢。


更新: 执行后which vim,我得到以下结果。

alias vim='__vi_internal_vim_alias'
    __vi_internal_vim_alias ()
    { 
        ( test -f /usr/bin/vim && exec /usr/bin/vim "$@";
        test -f /usr/bin/vi && exec /usr/bin/vi "$@" )
    }

我不确定这是什么以及在哪里发生的。也许这是 Fedora 33 的问题。鉴于上述信息,您建议永久修复什么?

答案1

在 Fedora 33 上遇到同样的问题。这似乎是因为sudo在我的环境中定义了别名:

$ alias sudo
alias sudo='\sudo '

因此,bash 以某种方式解析作为参数传递给sudoalias 的别名,如下例所示:

$ alias foo='echo foo'
$ sudo foo
foo

我本来希望有这个:

$ sudo foo
$ sudo: foo: command not found

删除这个别名对我有用。此别名是由/usr/local/bin/alias.sh, 项目的一部分synth-shell(https://github.com/andresgongora/synth-shell

答案2

正如 @scy 提到的,取消别名 vi 和 vim 是保留 sudo="sudo " 别名的解决方案,以便它可以与其他别名一起使用。

扩展他/她对不同外壳的答案:

ZSH外壳:添加到.zshrc文件(您希望受到更改影响的用户的文件)

  • 位于:

对于 Fedora 33 工作站(或服务器或其他非原子操作系统发行版): /home/$USER/.zshrc

对于 Fedora CoreOS 33.x(或 Silverblue 33 或其他类似的原子操作系统发行版): /var/home/$USER/.zshrc

  • 以下代码行:
[ "$(type -w vi)" = 'vi: alias' ] && unalias vi
[ "$(type -w vim)" = 'vim: alias' ] && unalias vim

bash外壳:添加到.bashrc文件(您希望受到更改影响的用户的文件)

  • 位于相同的位置,分别对应于 $USER 主目录的 OS/Distro 特定位置(检查 Fedora Workstation 等的说明...)
  • 下面的代码:
[ "$(type -t vi)" = 'alias' ] && unalias vi
[ "$(type -t vim)" = 'alias' ] && unalias vim

聚苯乙烯关于ZSH外壳,此解决方案可以解决处于类似初始化情况的其他 CLI 应用程序的类似问题。例如:MC(午夜指挥官)。同时,MC不会有任何这样的问题bash外壳

相关内容