从插入模式开始,可以通过 CTRL + O , v 输入“(insert) VISUAL
”模式。这进入可视模式,但在vim中显示为“(insert) VISUAL
”,从此模式按 Esc 会返回插入模式,而不是正常模式。 “(insert) VISUAL
”模式也是由插入模式中的移位箭头键输入的。
两个相关问题:
此特殊模式似乎没有太多文档。有没有简单的方法来搜索有关它的信息? (编辑:我知道 CTRL + O 通常会做什么。与视觉模式的交互似乎很特别。第一段是最简单的方式来引用什么这个模式是第一位的,因为我不知道它的可搜索名称。)
如何可靠地编写vmap
映射?也就是说,是否有一种一致的方式来保持视觉模式并最终进入正常模式?或者始终以插入模式结束?
答案 0 :(得分:14)
在插入模式下,<C-o>
允许您执行普通模式命令,而无需离开插入模式。 Vim尝试使用(insert)
指示新状态。由于您现在暂时处于正常模式,因此点击v
会使您进入可视模式,而Vim再次尝试使用{{1}来指示新状态}。 Vim处于这种状态只是因为你执行的命令序列,并且正如其他人所指出的那样,行为被记录在案。此时,(insert) VISUAL
会让您回到插入模式,这是正常的,因为这是您的原始模式。
对Vim有更深入理解的人可能会告诉你是否有一种可靠的方式来<Esc>
来自normal
- &gt; insert
- &gt; (normal)
但我会说整个想法听起来很可疑。
正确用法是:
基本上,您不应该远离正常模式visual
。
我无法想象在<Esc>
之后使用v
有任何意义的情况。
使用Vim的最佳和首选方法是尽可能远离 insert 模式。使用<C-o>
避免离开插入模式是一种非常糟糕的策略。我不知道你是做什么的,但如果你这样做,你应该尽快重新考虑这种方法。
但是我怀疑你正在尝试做一些别的事情,不管怎样,你认为我们不需要知道。
答案 1 :(得分:6)
关于第二个问题:您可以使用<C-\><C-n>
从任何其他模式切换到普通模式。没有命令可以通过这种方式可靠地切换到可视或插入模式,但是如果您只需要在视觉上切换到正常模式就足够了。请注意,大多数可视模式映射都在i<C-o>v
特殊模式下工作,无需修改。
答案 2 :(得分:1)
它记录在:h Operator-pending
,低于:h mode-switching
的记录。可视模式的映射也适用于(插入)可视模式。有关模式映射的评论,请参阅:h map-modes
。 vmap
会针对视觉模式和选择模式进行映射,xmap
将仅映射视觉但不映射,而smap
将仅映射选择但不映射。通常,您应该使用这些映射命令的noremap
版本来避免意外行为。
答案 3 :(得分:0)
关于第一个问题。
插入模式下的 CTRL + O 执行一个命令,然后退出回插入模式。见:h i_CTRL-O
。
关于第二个问题。
我认为你没有可靠的方式退出到某种模式。我认为最可靠的方式是从你想要结束的模式开始。