这是一个经常发生在我身上的可用性问题:
我用 vim 打开一个只读系统文件,甚至编辑它,因为我不够细心,或者因为系统上的 vim 配置不正确。一旦我完成更改,我就不得不将它们写入临时文件或丢失它们,因为 :w! 不起作用。
是否有一个 vim 命令 (:W!!!) 允许您以超级用户身份写入当前缓冲区?(Vim 会自然地询问您的 sudo 或 su 密码)
答案1
:w !sudo tee % >/dev/null`
解释:使用!
,您可以执行程序。通过在它前面加上 :w ,文件的内容(vim 中的内容,而不是原始文件,更准确地说:缓冲区)将在标准输入上提供给命令。被%
文件名替换,并且>/dev/null
避免了再次将内容打印到屏幕上(这是 的通常行为tee
)。
我找到了一种更短的方法。dd
不会打印到标准输出,因此您可以保存空值。
:w !sudo dd of=%
同样如此:r
,它插入给定命令的输出,因此你可以使用以下命令将当前日期插入到文件中::r !date
答案2
尝试:
:w !sudo tee % >/dev/null