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 以某种方式解析作为参数传递给sudo
alias 的别名,如下例所示:
$ 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-shell
(https://github.com/andresgongora/synth-shell)
正如 @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文件(您希望受更改影响的用户的)
[ "$(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中不会出现此类问题。