如何防止在Vim中保存文件

时间:2019-01-18 08:55:04

标签: vim

我正在将vim(vimdiff)定制为用于比较某些文件的测试工具,并且想完全禁用保存文件-但是,我一直无法停止:w! ..我已经尝试使用-R选项启动vim / vimdiff,我也尝试将cpoptions设置为包含W,这意味着:

                                                            cpo-W
            W       Don't overwrite a readonly file.  When omitted, ":w!"
                    overwrites a readonly file, if possible.

..但是vim似乎并不在乎:

echo yo > foo

vim -R foo

:set cpoptions=aABceFsW

:set cpoptions?
cpoptions=aABceFsW

:w
E45: 'readonly' option is set (add ! to override)

:w!
"foo" 1L, 3C written

.. bug,还是我误会了?

2 个答案:

答案 0 :(得分:3)

您刚刚告诉Vim它应该在“只读模式”下运行。该文件本身不是只读的。如果您chmod -w foo,则cpoptions中存在:w!时,Vim将不允许在W上写入文件。

您可以尝试使用-M来启动Vim:

vim -M foo

这不允许对文件进行任何更改,并阻止写入文件。参见:help -M

另一个解决方案可能是:

vim -m foo

这将打开文件,您可以对其进行编辑(得到警告W10: Warning: Changing a readonly file),但无法编写该文件。选项write被重置(至nowrite),并禁止写入任何文件。所以这是全球性的。

如果您最终决定仍然需要编写,则必须使用命令:set write设置该选项。如前所述,这是全局的,因此您将无法写入任何文件。

答案 1 :(得分:1)

最好使用文件权限或使用@ user7369280所述的-M选项,但有趣的是,您也可以使用某些选项启动vi,这会阻止您使用经典的wwq命令,例如:

vi my_file -c 'cabbrev w <esc>' -c 'cabbrev wq <esc>'

它基本上禁用了命令wwq,而用命令escape重新定义了它们(作用不大)