这个问题促成了我之前的一个问题:Vim's '(insert) VISUAL' mode?
在那个问题中,我询问了“VISUAL
”模式与“(insert) VISUAL
”模式,您可以直接从插入模式进入可视模式。我找到了一个根据视觉模式的“子类型”行为不同的映射,我不明白为什么:
vnoremap x <Esc>jjj
vnoremap <A-[> <C-G>ugv
第一个映射说明了Vim是如何使映射保持一致的:从“VISUAL
”模式按 x 并从 x “(insert) VISUAL
”模式将光标向下移动3行。后者不会退出插入模式并输入三个j
。因此,<Esc>
的行为不同,具体取决于模式,即使在映射之外,它的行为也会与这两种模式不同。
第二个映射说明了一些地图的行为不一致。如果您突出显示一个单词并按 ALT + [,那么如果从“ugv
”模式完成,该单词将替换为VISUAL
,但如果没有任何反应,从“(insert) VISUAL
”模式完成。据推测这是因为Vim正在执行“撤消”和“重新选择 - 视觉”的正常模式命令ugv
。
这是一个奇怪的不一致。这是我在调试映射时遇到的一个最小的例子,并且想知道它为什么会这样工作。
答案 0 :(得分:1)
我可以重现您的示例,我认为您的分析是正确的。
当我从(插入)视觉模式输入 <C-G>ugv
时,我得到了预期的结果:<C-G>
切换到(插入)选择模式,ugv
用这些字符替换选择。映射应该以相同的方式运行。
我猜这是一个错误;整个(插入)子模式非常特殊,不经常使用,因此容易出错。您可以自己深入研究源代码,或者在vim_dev mailing list上提出此问题。由于问题的模糊性,可能很难从开发者那里获得很大的兴趣。