如何解决 __vi_internal_vim_alias: command not found?

Nan*_*mbe 8 linux fedora vim sudo

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

sudo: __vi_internal_vim_alias: command not found
Run Code Online (Sandbox Code Playgroud)

我不确定是什么原因造成的。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 "$@" )
    }
Run Code Online (Sandbox Code Playgroud)

我不确定这是做什么以及在哪里做的。也许这是 Fedora 33 的事情。鉴于上述信息,您认为什么是永久性修复?

小智 5

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

$ alias sudo
alias sudo='\sudo '
Run Code Online (Sandbox Code Playgroud)

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

$ alias foo='echo foo'
$ sudo foo
foo
Run Code Online (Sandbox Code Playgroud)

我本来希望有这个:

$ sudo foo
$ sudo: foo: command not found
Run Code Online (Sandbox Code Playgroud)

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

  • 第一次发帖很有用,谢谢!;) 我也遇到过这个问题,确实删除了 `sudo` 别名修复了它。但是,如果您想_保留_那个 `sudo='\sudo '` 别名(因为它允许您将 `.bashrc` 中的别名与 sudo 一起使用),您可以删除 Fedora 的 `vi`/`vim` 别名反而。我已经将 `[ "$(type -t vi)" = 'alias' ] && unalias vi` 和 `[ "$(type -t vim)" = 'alias' ] && unalias vim` 添加到我的 `.bashrc ` 作为此问题的解决方法。 (2认同)

Vas*_*sil 4

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

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

ZSH Shell:添加到.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
Run Code Online (Sandbox Code Playgroud)

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

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

PS关于ZSH Shell,此解决方案可以解决处于类似初始化情况的其他 CLI 应用程序的类似问题。例如:mc(午夜指挥官)。同时,mc在BASH Shell中不会出现此类问题。