4

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

只添加一些内容的命令,例如:i, I, a, A(除了使用退格)。或者,也删除一段文本,例如:c[motion], C, s, v[motions]s

我想挂钩该InsertLeave事件,但在我的代码中,我需要知道它是哪种类型的更改(插入类似i,或改变类似cw)。有什么办法可以找出来吗?

4

2 回答 2

1

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

于 2013-01-08T12:02:11.530 回答
0

您可能可以利用一个差异:更改命令都修改寄存器(除非通过前置明确指定黑洞寄存器"_),而插入不会(好吧,除了".)。

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

于 2013-01-08T00:39:57.257 回答