使用sudo命令与.vimrc文件

92
我正在使用CentOS,并在我的/home目录下创建了一个.vimrc文件。我通过创建一个txt文件来测试它,这很好用。现在,我的项目文件位于启用SELinux的/srv目录中。我尝试打开一个文件:vim README.txt,是的,我的.vimrc设置仍然被应用。
现在,由于我在/srv目录中,简单地执行vim意味着我的文件是只读的。所以,我要执行sudo vim README.txt才能编辑文件。现在,问题在于一旦我执行sudo,就不会应用我的.vimrc设置。我尝试在/srv文件夹中创建一个.vimrc副本,但也没有起作用。
如何在使用sudo时应用.vimrc设置?

1
我只想简要解释一下:如果你执行 sudo,你会切换到 root 用户,所以 $HOME 就变成了 /root 目录(除非使用 -E 选项)。这意味着 vim 将加载 /root/.vimrc 中的配置。默认情况下,vim 没有配置从当前目录加载配置文件,这就是为什么它没有从 /srv 目录加载配置文件的原因。 - David Ferenczy Rogožan
抱歉挖出这个老问题,但也许可以帮助某些人:对我来说,vi 被设置为我的命名用户的 vim 别名,但不是 root 用户。难怪下面的答案都没有帮助;我一直在使用 vi - evilolive
4个回答

144

请使用sudoedit代替sudo vim。无论如何,您都应该这样做。确保您的EDITOR环境变量设置为vim(可能已经设置好了,或者vim是默认值;如果需要,可以在您的.profile相似文件中设置它)。


7
好的,为您翻译:完美,谢谢!一个概念性问题:为什么我应该使用sudoedit而不是sudo vim - noblerare
25
@noblerare 是为了安全起见。对于您自己的系统可能并不重要,但对于拥有“sudoers”特权的多个用户的系统非常重要。您可以从“vim”中运行任何shell命令,因此使用“sudo vim”可以执行任何操作!sudoedit会创建文件的临时副本,并不会授予这样的特权。请参考man sudoeditman visudo - Explosion Pills
3
也就是说,$ sudo -e filename - romainl
8
请注意,实际文件直到退出才会更新——如果您喜欢在不关闭 vim 的情况下保存和测试更改,这就不太好。 - Roger Dueck

64

此处所示,您可以使用以下内容:

sudo -E vim README.txt

来自手册页面:

-E    The -E (preserve environment) option indicates to the security policy that the user wishes to preserve their existing environment variables.  The
  security policy may return an error if the -E option is specified and the user does not have permission to preserve the environment.

被接受的答案最安全。但是这个更灵活,因为我可以在任何操作中使用sudo -E operation,我不需要事先配置其他任何东西。


@Claudio,你有关于你特定设置的更多细节吗?sudo -E *应该适用于任何命令。你确定你想要使用的.vimrc是为当前正在运行的用户设置的,而不是你登录的另一个用户并且使用他们的.vimrc或没有.vimrc,而不是你想要使用的那个吗? - leetNightshade
再试一次。操作系统:CentOS 7。如果我运行 vim *.vimrc 将被加载。如果我运行 sudoedit,它也会被加载。但是,如果我运行 sudo -E vim *,它就不会被加载。 - Claudio
@Claudio,星号(*)是用来干什么的?我不是说你不应该使用它,只是我不知道它是用来干什么的。此外,我使用sudo -E vim而没有星号,这对我有效。 - still_dreaming_1
1
@still_dreaming_1 我认为他的意思是无论他想编辑哪个文件(用文件名替换*),我假设他实际上没有输入那个字符。好问题。 - leetNightshade
这个解决方案还可以让您灵活地使用扩展,例如CTRL+P,而不像sudoedit解决方案。 - Kaa
确实是最实用的答案。当在服务器上时,sudoedit很好用,但在编辑我的家用机器配置文件时,它的安全性有点过头了。 - Michael Ekoka

20

/root/.vimrc是sudo vim的工作目录。

您需要将/home/ec2-user/.vimrc的.vimrc文件复制到/root/.vimrc中。


5
唯一真正的答案在这里。 - Girardi

3
其他回应中提供的解决方案可行,但并不是很实用,因为您每次想要编辑文件时都必须输入密码。
我通常会在一个tmux会话中打开并通过sudo su获得root权限,所以我只需要在会话开始时输入一次密码,然后就可以连续几个小时地工作而无需再次输入密码。
我通过创建以下符号链接解决了此处出现的问题: sudo su ln -s /home/MY-USER-NAME/.vimrc .vimrc ln -s /home/MY-USER-NAME/.vim .vim 您可能需要先删除/root/.vim/目录。
希望这可以帮到您。

除非我弄错了,你不需要在su命令前加上sudo。只需输入su并输入密码即可。如果您想要超级用户tmux会话的好处(即避免重复输入密码),同时保持正常用户环境,并且无需在根主目录中创建符号链接,则在启动tmux会话时使用sudo -E,如先前答案中建议的那样:sudo -E tmux new -s foo - Michael Ekoka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接