我正在编写BufUnload
autocmd
,我想有条件地阻止缓冲区从autocmd中实际卸载或关闭。有没有办法做到这一点?
例如,我想使用autocmd将缓冲区的内容用作mercurial的提交消息:
autocmd BufUnload <buffer> !hg ci -l logfile
因此,如果提交失败(hg
命令返回非零错误代码),我想让缓冲区保持打开状态不变。
答案 0 :(得分:2)
我建议将此消息保存在变量中。在aurum(VCS↔Vim集成的插件)中,存在以下逻辑编码:当具有提交消息的缓冲区被擦除或写入(触发实际提交并将其擦除)时,我保存了三个变量:
hg log -r .
查看)。。然后,当再次提交某些内容时,将使用以下逻辑:如果当前存储库根目录与已保存的存根相同,那么当前提交十六进制是,则从变量中获取提交消息并初始化缓冲区。
以下行为的原因:
hg rollback
,编辑了一些内容并希望再次提交,我想恢复提交消息。保存当前提交十六进制用于区分前三个和最后一个案例。
答案 1 :(得分:1)
我不认为这是可能的(至少我无法实现这一点,即使在:throw
BufUnload
上:edit
例外,但没有任何事情可以阻止你重新expand('<afile>')
同一个文件(假设它被正确保留)立即再次。您可以通过:cquit
从autocmd中获取filespec。
使用提交消息,它通常以另一种方式工作:修订控制系统触发提交消息编辑器,并在消息为空或编辑器退出并出现错误时中止提交(在Vim中,您可以使用{ {1}})。
为了从重新调用Vim中调用这些中止的提交消息,我写了VcsMessageRecall plugin。可能会帮助您实现目标。