我有一个奇怪的问题,从一个被拔出的文本创建的宏。我可以访问Ubuntu上的另一个vim安装(我使用Gentoo)并且不会发生此问题。我需要的是帮助找到这种行为的原因。
我开始录制一个宏,比方说qr
。
我输入以下字符:iasdas<ESC>q
此宏应插入文本asdas
并退出插入模式。使用@r
运行它正是这样做的。
现在我想手动输入我的宏,猛拉它并运行。
我进入插入模式:
iasdas^[
当然^[
插入了<Ctrl>+v, <ESC>
。
我将它拖到注册q
:"qyy
。
然后我验证了q
的内容,这是完全正确的。
我用@q
运行它,我得到的是最令人困惑的。键入文本asdas
,vim处于插入模式(!),光标位于最后s
。
这意味着实际发生的事情是iasdas^[i
- 否则光标将在 s
之后。将^[
更改为jj
,我已将其映射为escape,但未更改任何内容。
我有一个非常复杂的宏,我试图手工编辑。现在我必须在宏之后转义插入模式,这在很多方面都很糟糕......
作为一种解决方法,我创建了一个包含@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 --
...
不知道为什么这个InsertEnter会触发,我可以获得更精细的输出吗?
答案 0 :(得分:5)
你可以试试这个
:let @q='iasds^['
答案 1 :(得分:2)
罪魁祸首。
问题在于“yy”。
实际上,我说Then I verify the content of q and it's exactly correct.
这不是真的。 yy
在行尾复制了^M
。
由于@IngoKarkat和@Amit的回答,我已经检测到了它。在命令行中粘贴宏显示::iasdas^[^M
。
我不知道为什么它会进入插入模式。我没有输入密钥的这种映射,它是否意味着其他东西?
最令人困惑,但很有趣。感谢@Amit和@IngoKarkat的回答,这是一个很好的暗示!
当然,没有^M
的yanking在某种程度上解决了这个问题。