3

这个问题引发了我之前的一个问题: Vim's '(insert) VISUAL' mode?

在那个问题中,我询问了“ VISUAL”模式与“ (insert) VISUAL”模式,这是您直接从插入模式进入视觉模式的地方。我发现了一个根据视觉模式的“子类型”表现不同的映射,我不明白为什么:

vnoremap x <Esc>jjj
vnoremap <A-[> <C-G>ugv

第一个映射说明了 Vim 如何不遗余力地使映射行为一致:x从 " VISUAL" 模式按下和x从 " " 模式按下(insert) VISUAL都会将光标向下移动 3 行。后者不退出插入模式并进入三个j's。因此<Esc>,即使在映射之外它的行为与这两种模式不同,它的行为也不会因模式而异。

第二个映射说明了一些映射如何表现不一致。如果您突出显示一个单词并按ALT+ ,则如果从“ ”模式完成,[则该单词将被替换,但如果从“”模式完成,则不会发生任何事情。这大概是因为 Vim 正在执行'undo' 和 'reselect-visual' 的正常模式命令。 ugvVISUAL(insert) VISUALugv

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

4

1 回答 1

1

我可以重现你的例子,我认为你的分析是正确的。

当我从(插入)可视模式键入 时,我得到了预期的结果:切换到(插入)选择模式,用这些字符替换选择。映射应该以相同的方式运行。<C-G>ugv<C-G>ugv

我想这是一个错误;整个(插入)子模式非常特殊,不经常使用,因此容易出现错误。您可以自己深入研究源代码,或者在vim_dev 邮件列表中提出这个问题。不过,由于问题的模糊性,可能很难引起开发人员的极大兴趣。

于 2013-04-26T07:10:36.927 回答