如何确定InsertLeave是否是更改的结果

时间:2013-01-07 14:24:30

标签: vim

在Vim中,基本上有两种类型的命令可以使它进入插入模式:

仅添加内容的命令,例如:iIaA(除了使用退格键)。 或者,这也删除了一段文字,例如:c[motion]Csv[motions]s

我想挂钩InsertLeave事件,但在我的代码中,我需要知道它是哪种类型的更改(像i这样的插入,或者像cw这样的更改) 。有没有办法找到它?

2 个答案:

答案 0 :(得分:1)

i<BS><BS><BS>bar计为插入还是更改?如果是后者,您可以:undo InsertLeave上的更改,存储受其影响的行(即'[,']),:redo,然后比较两个集合。如果有“更多文字”,那就是插入,否则就是改变。

答案 1 :(得分:0)

您可以利用一个区别:更改命令都修改寄存器(除非通过前置"_明确指定了黑洞寄存器),而插入则没有(嗯,除了".)。

如果您之前使用默认寄存器的“快照”(例如使用CursorMoved,CursorHold组合)并比较InsertLeave上的内容,则可以找到答案。