如何跳到视觉select的开始/结束?

是否有移动到视觉select的开始或结束? 我知道o而在视觉模式之间交替,但我需要能够精确select的开始。 总体目标是用圆括号围绕视觉select的区域。


基于评论,我能够使用下面的macros实现这个。 这个想法是:

  1. 退出可视模式
  2. `<去前一个视觉select的结尾
  3. a)附加一个闭合的括号
  4. 退出插入模式
  5. `<去前一个视觉select的开始
  6. i(插入一个开头的括号
  7. 再次退出插入模式。

例如:

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

基于另一个评论,我们有一个更简洁的解决scheme,

 map \qc()<ESC>P 

最简单的方法是用圆括号包围一个视觉选定的区域,然后插入()并将其放回到midle中。

 di()<ESC>P 

我build议定义一个新的.vimrc可视模式命令(例如“\ q”):

 :vmap \q di()<ESC>P 

更新 :正如@duckworthd明智地指出,当选定区域的最后一个字符是行中的最后一个字符时,以前失败。

新版本:用()将视觉select的区域切换到中间。

 :vmap \qc()<ESC>P 

这种方法也适用于直观的矩形区域( <CV> ):它在每个块线周围放置“(”“)”

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

Visual Selection单击o 。 它会将光标的位置改变为select的另一端。 然后O跳回来。

如果你只是想包围一个视觉select,那么已经完成了工作,即由编写这个插件的蒂姆·波普(Tim Pope)编写的“ surround 。 它用你喜欢的分隔符围绕着文字或视觉select。

select你的视觉select,比如i like vim命中S)得到(i like vim)S(得到( i like vim ) ,改变这个[i like vim]typescs] (改变周围),并删除ds]最后让i like vim

如果你不能使用Surrond.vim,这是一个办法:

  1. vv做视觉select。
  2. <Esc>离开它。
  3. 键入`>a)<Esc>在select的最后一个字符插入一个右括号。
  4. input`<i(<Esc>在select的第一个字符之前插入左括号。