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