:w
在使用 git 进行交互式 rebase 后,我经常发现我在 vim 中打开的文件在文件系统上已被修改。当我使用或写入文件时:w!
,我收到提示WARNING: The file has been changed since reading it!!!
/ Do you really want to write to it (y/n)?
。
我认为这个警告足够合理;默默地覆盖文件系统上因任意原因而更改的文件是一种可疑的行为。但是,在这种情况下,我知道文件被触碰的原因,我经常发现我想强制写入它,而不是检查是否有提示。我遇到过这样的情况,我没有注意到提示,并立即跳出,导致构建不一致,有时还会导致数据丢失。
我如何摆脱确认提示,永久地或者(最好)使用类似于的扩展命令w!
?
当我用 Google 搜索时,我得到很多有关强制写入只读文件的结果w!
,但似乎找不到任何有关强制写入已修改文件的内容。
答案1
以下命令适用于当前缓冲区(我不知道多个缓冲区的解决方案):
:w !sudo tee %
字符%
代表当前文件名。该sudo
命令允许覆盖以只读方式打开的文件。
要定义:w!!
为执行上述操作的命令,请将其添加到.vimrc
:
cmap w!! w !sudo tee > /dev/null %
该部分消除了这里未使用的> /dev/null
标准输出。tee
更多信息请参阅帖子 vim“用 sudo 写入”技巧如何工作?