在Vim中,基本上有两种类型的命令可以使它进入插入模式:
仅添加内容的命令,例如:i
,I
,a
,A
(除了使用退格键)。
或者,这也删除了一段文字,例如:c[motion]
,C
,s
,v[motions]s
。
我想挂钩InsertLeave
事件,但在我的代码中,我需要知道它是哪种类型的更改(像i
这样的插入,或者像cw
这样的更改) 。有没有办法找到它?
答案 0 :(得分:1)
将i<BS><BS><BS>bar
计为插入还是更改?如果是后者,您可以:undo
InsertLeave
上的更改,存储受其影响的行(即'[,']
),:redo
,然后比较两个集合。如果有“更多文字”,那就是插入,否则就是改变。
答案 1 :(得分:0)
您可以利用一个区别:更改命令都修改寄存器(除非通过前置"_
明确指定了黑洞寄存器),而插入则没有(嗯,除了".
)。
如果您之前使用默认寄存器的“快照”(例如使用CursorMoved,CursorHold
组合)并比较InsertLeave
上的内容,则可以找到答案。