sudo 时如何将 vim 设置为默认编辑器?

sudo 时如何将 vim 设置为默认编辑器?

我正在 CentOS 5.9 机器上工作,我只想输入

sudo vi 一些文件

并让我值得信赖的 vim 进行语法突出显示等。这看起来很简单,但经过多次尝试后,它仍然不起作用。

root@localhost> which vi
alias vi='vim'
        /usr/bin/vim
root@localhost> sudo which vi
/bin/vi
root@localhost> sudo -i which vi
/bin/vi
root@localhost> sudo -E which vi
/bin/vi

我以 root 身份登录以确保默认情况下vi somefile调用 vim。它做了。我还尝试使用 -E 保留环境并使用 -i 运行登录脚本。那没有用。在我的 .profile 和 /etc/environment 中,我将编辑器导出为 vim,并将 vi 设置为 vim 的别名。

我还在 /etc/sudoers 中注释掉了 env_reset 行。

我还应该尝试什么?我没想到用 vim 替换 vi 会这么困难,而且我真的很想了解这里发生了什么。

答案1

这就是该命令sudoedit的用途。它创建一个在用户环境中编辑的临时副本。它查阅SUDO_EDITOR,VISUAL和变量EDITOR来找到合适的二进制文件。编辑后,副本将覆盖原始文件。

答案2

如果你总是想使用vim而不是vi,你可以

$ sudo ln -s /usr/bin/vim /usr/local/bin/vi

(这假设你有/usr/local/bin /bin在你的PATH。)

诚然,这是一个(系统本地)黑客,但非常简单有效。

答案3

我相信观察到的行为的原因可以在 PATH 变量中找到。作为常规登录用户,该段可能/usr/bin位于之前/bin,而当 sudoing as,该段/bin位于前面/usr/bin

如果是这样,则差异可以追溯到以下一个或两个起源。如果使用时PATH的值不同须藤,这指向安全路径配置参数,通常在文件/etc/sudoers或文件之一中设置/etc/sudoers.d/*。但是,如果登录时 PATH 的值不同(无论是一级登录还是使用须藤's -i/--login开关),这指向启动文件,例如/etc/{profile,profile.d/*}/etc/{bashrc,bash_*}

我手头没有安装 CentOS 5,但我的 Alma 8 服务器提供了以下信息:

## As a regular logged-in user
$ echo $PATH
/home/me/.local/bin:/home/me/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

## Sudoing as root (notice the reverse order)
$ sudo bash -c 'echo $PATH'           
/sbin:/bin:/usr/sbin:/usr/bin

## Sudoing as myself (same value)
$ sudo -u me bash -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin

## Indeed...
$ sudo grep secure_path /etc/sudoers
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

您还可以快速浏览一下须藤环境保持参数并将 VISUAL 和 EDITOR 添加到保留变量列表中(如果尚未存在),但既然您提到了这一点环境重置关掉了,应该不会有太大变化。

相关内容