从 Vim 内部成为 root

Mad*_*ist 75 vim root sudo

有时我在/etc使用 Vim 时开始编辑配置文件,但忘记使用sudo启动 Vim。不可避免的结果是,在完成我的编辑后,我遇到了可怕的通知,即我没有保存文件的权限。

大多数编辑都足够小,我只需退出 Vim 并以 root 身份再次执行整个操作。我当然可以保存到我可以写入的位置,然后以 root 身份复制,但这也有点烦人。

但是我确信有一种更简单的方法可以sudo在 Vim 内部成为 root 或使用,而不必放弃更改。如果该方法不依赖于sudo为用户设置,那就更好了。

pen*_*359 53

sudo 不能更改现有进程的有效用户,它总是创建一个具有提升权限的新进程,并且原始 shell 不受影响。这是 UNIX 设计的基础。我通常只是将文件保存到 /tmp 作为解决方法。如果您真的想直接保存它,您可以尝试使用 Vim 的一项功能,它可以将文件通过管道传输到另一个进程。尝试使用以下命令保存:

:w !sudo dd of=%
Run Code Online (Sandbox Code Playgroud)

测试和工作。Vim 然后会要求您重新加载文件,但这是不必要的:您只需按o即可避免重新加载和丢失撤消历史记录。您甚至可以将其保存到 Vim 命令/函数中,甚至可以将其绑定到一个键以便于访问,但我会将其作为练习留给读者。

  • 实际上,如果你真的想小心,你应该做 `exec 'w !sudo dd of=' 。shellescape(expand('%'))` 以防文件名包含引号、反斜杠、美元符号等。 (2认同)

pla*_*aes 40

以 root 身份保存文件:

:w !sudo tee %
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 13

调用sudoedit以 root 身份编辑文件。

vim直接打电话的不便想象成警告你做一些有潜在危险的事情太随意了。


Ham*_*ner 7

你可以把它放在你的 .vimrc

cmap w!! %!sudo tee > /dev/null %
Run Code Online (Sandbox Code Playgroud)

您通过执行它来触发它:w!!- 它会将文件推sudo tee送到当前文件名 ( %)。

来自/sf/ask/6655071/ 上现已删除的帖子;另见:https : //stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim