使用 sudo 和 .vimrc

Posted

技术标签:

【中文标题】使用 sudo 和 .vimrc【英文标题】:Use sudo with .vimrc 【发布时间】:2014-02-24 15:17:09 【问题描述】:

我正在使用 CentOS,并在我的 /home 目录中创建了一个 .vimrc 文件。我通过创建一个 txt 文件对其进行了测试,是的,效果很好。现在,我的项目文件在我的/srv 目录中,并打开了 SELinux。我尝试打开一个文件:vim README.txt,是的,我的.vimrc 设置仍在应用中。

现在,由于我在/srv 目录中,只需执行vim 意味着我的文件是只读的。所以,我做sudo vim README.txt 以便能够编辑文件。现在,问题在于一旦我执行sudo,我的.vimrc 设置都不会应用。我尝试在/srv 文件夹中创建.vimrc 的副本,但这也不起作用。

如何在使用sudo 时应用.vimrc 设置?

【问题讨论】:

我只是添加一个简短的解释:如果您执行sudo,您将自己切换到root用户,因此$HOME成为/root目录(除非-E选项用来)。这意味着vim 将加载/root/.vimrc 中的配置。 vim默认没有配置从当前目录加载配置,所以没有从/srv目录加载配置。 【参考方案1】:

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

【讨论】:

完美。谢谢!一个概念性问题:为什么我应该使用sudoedit 而不是sudo vim @noblerare 以确保安全。可能对您自己的系统无关紧要,但对于拥有sudoers 权限的许多用户的系统来说非常重要。你可以从vim 运行任何shell 命令,所以使用sudo vim 你可以做任何事情! sudoedit 创建文件的临时副本并且不授予此类权限。 man sudoeditman visudo 另外,$ sudo -e filename 请注意,实际文件在您退出之前不会更新 - 如果您想在不关闭 vim 的情况下保存和测试您的更改,那就不好了。【参考方案2】:

如图here,可以使用如下:

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 或缺少一个,而不是你想要使用的那个吗? 再试一次。操作系统:CentOS 7。如果我运行 vim * .vimrc 已加载。如果我运行sudoedit,它也会被加载。但如果我运行sudo -E vim *,它不会。 @Claudio * 是什么意思?我不是说你不应该使用它,我只是不知道它是做什么用的。另外,我使用不带 * 的 sudo -E vim,这对我有用。 @still_dreaming_1 我以为他指的是他试图编辑的任何文件(将 * 替换为文件名),我认为他实际上并没有输入。好问题。 与 sudoedit 解决方案不同,此解决方案还为您提供了使用 CTRL+P 等扩展的灵活性【参考方案3】:

其他回复中提供的解决方案有效,但不是很实用,因为每次要编辑文件时都必须输入密码。

我通常打开一个tmux 会话,我通过sudo su 在其中扎根,所以我在会话开始时输入一次密码,然后可以工作几个小时而无需再次输入。

我通过创建以下符号链接解决了这里提出的问题: 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.【参考方案4】:

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

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

【讨论】:

这里唯一正确的答案

以上是关于使用 sudo 和 .vimrc的主要内容,如果未能解决你的问题,请参考以下文章

蝴蝶效应--由'sudo -s ...'引发的vim autocmd使用异常

vi编辑文件保存后,提示""vimrc" E212: Can't open file for writing Press ENTER or type comman

配置Vim编辑器设置Tab键的格数(长度)

Vim的配置

Linux 使用vi和vim方向键变成了ABCD,按照网上的将vimrc_example.vim拷贝的用户目录下,改名为.vimrc 好了

如果有多个,将使用什么.vimrc?