【发布时间】:2011-04-04 18:58:31
【问题描述】:
我有一个对当前文件执行有效性检查的功能(以符合我雇主的编码标准)。我想在保存之前调用这个函数,即使用 BufWritePre。但是,如果我的检查功能失败,我会阻止保存文件。
那么,是否有可能突破 BufWritePre 自动命令?
我意识到我可以通过重新映射:write 命令来实现这一点,如图所示here,但我想尽可能避免这种情况,因为它感觉有点不微妙。
提前感谢您的建议。
【问题讨论】:
标签: vim
我有一个对当前文件执行有效性检查的功能(以符合我雇主的编码标准)。我想在保存之前调用这个函数,即使用 BufWritePre。但是,如果我的检查功能失败,我会阻止保存文件。
那么,是否有可能突破 BufWritePre 自动命令?
我意识到我可以通过重新映射:write 命令来实现这一点,如图所示here,但我想尽可能避免这种情况,因为它感觉有点不微妙。
提前感谢您的建议。
【问题讨论】:
标签: vim
您可以“简单地”强制出错:
:autocmd BufWritePre *.txt throw "you may not"
如果您希望能够再次保存 .txt 文件
:autocmd!
:source $MYVIMRC
【讨论】:
:w! 会强制解决这个错误?
w! 无论如何都不会写
来自: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('^', '$')) 之类的东西才能真正进行写作。
另一方面,你也许可以做类似的事情
:write 再次文件。我不确定它是否允许您在 BufWriteCmd 处理程序中执行此操作。:finally 子句中,以确保即使写入出现问题它也能执行。【讨论】: