使用 vim 强制写入文件系统上已被修改的文件

使用 vim 强制写入文件系统上已被修改的文件

: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 写入”技巧如何工作?

相关内容