我有一个奇怪的问题,从一个被拔出的文本创建的宏.我可以访问Ubuntu上的另一个vim安装(我使用Gentoo)并且不会发生此问题.我需要的是帮助找到这种行为的原因.
我开始录制一个宏,比如说qr.
我输入以下字符: iasdas<ESC>q
此宏应插入文本asdas并退出插入模式.运行它@r正是这样做的.
现在我想手动输入我的宏,猛拉它并运行.
我进入插入模式:
iasdas^[
Run Code Online (Sandbox Code Playgroud)
当然^[插入了<Ctrl>+v, <ESC>.
我把它拿到寄存器上q:"qyy.
然后我验证内容,q这是完全正确的.
我运行它,@q我得到的是最令人困惑的.asdas键入文本,vim处于插入模式(!),光标位于最后一个s.
这意味着实际发生的事情是iasdas^[i- 否则光标会在之后 s.更改^[到jj,我已经映射到逃跑,没有任何改变.
我有一个非常复杂的宏,我试图手动编辑.现在我必须在宏之后转义插入模式,这在很多方面都很糟糕......
作为一种解决方法,我已经创建了一个包含@q^[但却打破了行为的宏@@,因此它不是一个好的解决方案.
这个问题让我很头疼.我不知道从哪里开始寻找原因.我刚刚更新到Vim 7.4,在我的7.3上使用完全相同的配置观察到相同的行为.
我的.vimrc很长,有10个插件.试图删除它们中的每一个都是很多工作,所以我喜欢用任何其他方式来跟踪它.
根据我试图调试的建议,运行vim -V100vimlog文件名,我得到:
...
Calling shell to execute: "(printf "0x%X" $((0x4A307204 +0x4))) >/tmp/vWo43Tm/2 2>&1"
Executing CursorMoved Auto commands for "*"
Executing TextChanged Auto commands for "*"
Executing CursorMoved Auto commands for "*"
Executing CursorMoved Auto commands for "*"
Executing CursorMoved Auto commands for "*"
Executing TextChanged Auto commands for "*"
Executing CursorMoved Auto commands for "*"
Executing CursorMoved Auto commands for "*"
Executing InsertEnter Auto commands for "*"-- INSERT --
...
Run Code Online (Sandbox Code Playgroud)
不知道为什么这个InsertEnter会触发,我可以获得更精细的输出吗?