我最近在我的机器上升级到了 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 以某种方式解析作为参数传递给sudo
alias 的别名,如下例所示:
$ 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外壳。