从 Vim 内部成为 root

从 Vim 内部成为 root

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

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

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

答案1

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

:w !sudo dd of=%

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

答案2

将文件保存为 root:

:w !sudo tee %

答案3

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

将直接打电话时的不便vim视为警告,表明您在做一些潜在危险的事情时过于随意。

答案4

这也很有效:

:w !sudo sh -c "cat > %"

这是受到 @Nathan Long 的评论的启发回答

注意:

"必须使用而不是'因为我们希望%在传递到 shell 之前进行扩展。

相关内容