使用 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 sudoedit
和 man 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
Linux 使用vi和vim方向键变成了ABCD,按照网上的将vimrc_example.vim拷贝的用户目录下,改名为.vimrc 好了