在 Vim 中,基本上有两种类型的命令可以使其进入插入模式:
只添加一些内容的命令,例如:i
, I
, a
, A
(除了使用退格)。或者,也删除一段文本,例如:c[motion]
, C
, s
, v[motions]s
。
我想挂钩该InsertLeave
事件,但在我的代码中,我需要知道它是哪种类型的更改(插入类似i
,或改变类似cw
)。有什么办法可以找出来吗?
在 Vim 中,基本上有两种类型的命令可以使其进入插入模式:
只添加一些内容的命令,例如:i
, I
, a
, A
(除了使用退格)。或者,也删除一段文本,例如:c[motion]
, C
, s
, v[motions]s
。
我想挂钩该InsertLeave
事件,但在我的代码中,我需要知道它是哪种类型的更改(插入类似i
,或改变类似cw
)。有什么办法可以找出来吗?
i<BS><BS><BS>bar
算作插入还是更改?如果是后者,您可以:undo
更改InsertLeave
,存储受它影响的行(即'[,']
):redo
,然后比较两组。如果有“只是更多的文字”,那就是插入,否则就是改变。
您可能可以利用一个差异:更改命令都修改寄存器(除非通过前置明确指定黑洞寄存器"_
),而插入不会(好吧,除了".
)。
如果您之前拍摄默认寄存器的“快照”(例如使用CursorMoved,CursorHold
组合)并比较 上的内容InsertLeave
,您可以找到。