我正在将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,还是我误会了?
答案 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
,这会阻止您使用经典的w
或wq
命令,例如:
vi my_file -c 'cabbrev w <esc>' -c 'cabbrev wq <esc>'
它基本上禁用了命令w
和wq
,而用命令escape
重新定义了它们(作用不大)