为什么此Vim映射的行为会因进入视觉模式的方式而异?

为什么此Vim映射的行为会因进入视觉模式的方式而异?,vim,insert,keymapping,Vim,Insert,Keymapping,这个问题引发了我之前的一个问题: 在那个问题中,我问了关于“视觉”模式和“(插入)视觉”模式的问题,即直接从插入模式进入视觉模式。我发现一个映射根据视觉模式的“子类型”表现不同,我不明白为什么: vnoremap x <Esc>jjj vnoremap <A-[> <C-G>ugv vnoremap x jjj 虚拟地图ugv 第一个映射说明了Vim如何不遗余力地使映射行为一致:在“视觉”模式下按x和在“(插入)视觉”模式下按x都会将光标向下移动3行。后者

这个问题引发了我之前的一个问题:

在那个问题中,我问了关于“
视觉
”模式和“
(插入)视觉
”模式的问题,即直接从插入模式进入视觉模式。我发现一个映射根据视觉模式的“子类型”表现不同,我不明白为什么:

vnoremap x <Esc>jjj
vnoremap <A-[> <C-G>ugv
vnoremap x jjj
虚拟地图ugv
第一个映射说明了Vim如何不遗余力地使映射行为一致:在“
视觉
”模式下按x和在“
(插入)视觉
”模式下按x都会将光标向下移动3行。后者不会退出插入模式并输入三个
j
。因此,
的行为不会因模式而异,即使在映射之外,它的行为也会与这两种模式不同

第二个映射说明了某些映射的行为如何不一致。如果突出显示一个单词并按ALT+[如果从“
视觉
”模式执行,则该单词将被替换为
ugv
,但如果从“
(插入)视觉
”模式执行,则不会发生任何情况。这可能是因为Vim正在执行正常模式命令
ugv
,用于“撤消”和“重新选择视觉”


这是一个奇怪的不一致性。这是我在调试映射时遇到的一个最小示例,我想知道它为什么会这样工作。

我可以重现您的示例,我认为您的分析是正确的

当我从(插入)视觉模式键入
ugv
时,我得到了预期的结果:
切换到(插入)选择模式,
ugv
用这些字符替换选择。映射应以同样的方式进行

我猜这是一个bug;整个(插入)子模式非常特殊,不经常使用,因此容易出现bug。您可以自己深入研究源代码,或者在网站上提出这个问题。但是,由于问题的模糊性,可能很难从开发人员那里获得太多的兴趣