Vim-类型化键和映射键之间的差异?

Vim-类型化键和映射键之间的差异?,vim,Vim,在Vim的feedkeys()文档中,对模式t的描述如下: 't' Handle keys as if typed; otherwise they are handled as if coming from a mapping. This matters for undo, opening folds, etc. 这有什么区别?来自映射的键在哪些方面表现不同?为什么这种差异对撤消、打开折叠等很重要?映射序列对于撤消是原子化的 如果您使用多个命令更改文本

在Vim的
feedkeys()
文档中,对模式
t
的描述如下:

    't' Handle keys as if typed; otherwise they are handled as
        if coming from a mapping.  This matters for undo,
        opening folds, etc.

这有什么区别?来自映射的键在哪些方面表现不同?为什么这种差异对撤消、打开折叠等很重要?

映射序列对于撤消是原子化的

如果您使用多个命令更改文本,则“撤消”将逐个更改将其撤消

如果您将相同的命令序列映射到映射,并尝试撤消它,它将在运行映射之前恢复状态更改

例如:文本“12345”的光标位于2上。你打了3次“x”。你需要3次点击“u”才能把文字带回来

如果进行映射:

:map q xxx
按q键后,只需按一次“u”键即可恢复更改

也可从
:h映射撤消

如果在映射序列中包含撤消命令,这将使文本恢复到执行宏之前的状态。这与 原版Vi


那真的很有趣,谢谢!函数是否有类似的行为?我注意到,如果在我的函数中间有<代码>新的<代码>,然后有一些命令,新窗口只出现在这些命令的结果中,而不是首先出现空,然后看到它填充,好像它都是一个原子操作。此外,您还将感兴趣
:帮助撤消块
。从
:help undo
使用手动折叠时,折叠不会保存和恢复。只有完全在一个折叠中进行更改才能保持折叠的原样,因为折叠的第一行和最后一行不会更改
是的,当我尝试在版本控制下的文件上使用手动折叠时,我遇到了一些困难--切换分支破坏了折叠。