在BufWritePre期间防止文件保存

时间:2011-04-04 18:58:32

标签: vim

我有一个功能,可以对当前文件执行有效性检查(以符合我雇主的编码标准)。我想在保存之前调用此函数,即使用BufWritePre。但是,如果文件检查功能失败,我会阻止保存文件。

那么,是否有可能打破BufWritePre自动命令?

我意识到我可以通过重新映射:write命令here来完成此任务,但我想尽可能避免这种情况,因为它感觉有些不太微妙。< / p>

提前感谢您的建议。

2 个答案:

答案 0 :(得分:4)

您可以“简单地”强制执行错误:

:autocmd BufWritePre *.txt throw "you may not"

如果您希望能够再次保存.txt文件

:autocmd!
:source $MYVIMRC

答案 1 :(得分:1)

来自:help BufWriteCmd

                            *BufWriteCmd*
BufWriteCmd         Before writing the whole buffer to a file.
                Should do the writing of the file and reset
                'modified' if successful, unless '+' is in
                'cpo' and writing to another file |cpo-+|.
                The buffer contents should not be changed.
                |Cmd-event|

所以听起来你可以实现那个自动命令,只有在允许保存时才进行保存并重置'modified'

我猜你必须使用像writefile(getline('^', '$'))这样的东西来实际写作。

另一方面,您可以做类似

的事情
  • 禁用BufWriteCmd自动命令
  • 再次
  • :write该文件。我不确定它是否允许你在BufWriteCmd处理程序中执行此操作。
  • 重新启用BufWriteCmd自动命令。您应该将其放在:finally子句中,以确保即使写入有问题也能执行。