70

是否有移动到视觉选择的开始或结束的动作?

我知道o虽然在视觉模式下两者之间交替,但我需要能够精确地选择开始。

总体目标是用括号包围一个视觉选择的区域。


跟进:

根据评论,我能够使用以下宏来实现这一点。这个想法是:

  1. Esc退出视觉模式;
  2. `>转到上一个视觉选择的末尾;
  3. a)附加右括号;
  4. Esc退出插入模式;
  5. `<转到上一个视觉选择的开始;
  6. i(插入左括号;
  7. Esc再次退出插入模式。

例如:

map \q <ESC>`>a)<ESC>`<i(<ESC>

根据另一条评论,我们有一个更简洁的解决方案:

map \q c()<ESC>P
4

5 回答 5

89

有两个相关的内置标记保存当前缓冲区中最后一个视觉选择的第一个和最后一个字符的位置。为了将光标移动到这些标记,请分别使用命令 `< 和 `>(请参阅:help `>:help `<)。

于 2012-06-24T09:16:59.323 回答
80

当你在Visual Selectionclick时o。它会将光标的位置更改到选择的另一端。然后O往回跳。

于 2015-05-02T17:36:56.067 回答
25

“用括号包围视觉选择区域”的最简单方法是:

c将视觉选择的区域挂在中间,()然后P将其放回中间:c()<ESC>P

我建议在.vimrc文件中定义一个新的可视模式命令(例如,\q):

:vmap \q c()<ESC>P

这种方法也适用于视觉矩形区域(<C-V>):它放置()围绕每个块线。

于 2015-09-24T09:45:22.397 回答
19

如果您只是想围绕一个视觉选择,那么已经完成了工作,即 tim pope,他编写了这个名为surround. 它使用您喜欢的分隔符围绕单词或视觉选择。

选择您的视觉选择,例如i like vim点击S)获取(i like vim)S(获取( i like vim ),将其更改为[i like vim]类型cs](更改环境)并删除ds]以获取i like vim最后。

于 2012-06-24T12:53:41.760 回答
10

如果你不能使用 Surrond.vim,这里有一种方法:

  1. v使用或进行视觉选择V
  2. 摆脱它<Esc>
  3. 键入以在所选内容的最后一个字符之后`>a)<Esc>插入右括号。
  4. 键入以在所选内容的第一个字符之前`<i(<Esc>插入一个左括号。
于 2012-06-24T13:55:12.317 回答