来自被拔出的文本的Vim宏进入插入模式

Pio*_*fer 2 vim macros

我有一个奇怪的问题,从一个被拔出的文本创建的宏.我可以访问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会触发,我可以获得更精细的输出吗?

Ami*_*mit 5

你可以试试这个

:let @q='iasds^['
Run Code Online (Sandbox Code Playgroud)