【发布时间】:2014-03-07 23:49:49
【问题描述】:
我有一个最奇怪的问题,即从抽出的文本创建的宏。我可以访问 Ubuntu 上的另一个 vim 安装(我使用 Gentoo)并且不会发生此问题。我需要的是帮助找出这种行为的原因。
首先是一个可以正常工作的案例:
我开始使用qr 录制宏。
我输入了以下字符:iasdas<ESC>q
此宏应插入文本asdas 并退出插入模式。使用@r 运行它就是这样做的。
第二种情况:
现在我想手动输入我的宏,拉下它并运行。
我进入插入模式:
iasdas^[
当然^[ 插入<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 --
...
不知道为什么这个 InsertEnter 会触发,我可以得到更详细的输出吗?
【问题讨论】:
-
我还敢说这与映射或
:autocmd InsertLeave事件处理程序有关。