是否有移动到视觉选择的开头或结尾的动作?
我知道在视觉模式下,o在两者之间交替,但我需要能够精确地选择开始。
总体目标是用括号包围视觉上选定的区域。
<小时 />跟进:
根据注释,我能够使用以下宏实现这一点。这个想法是:
- Esc 退出可视模式;
-
`>
转到上一个视觉选择的末尾; -
a)
附加右括号; - 电调退出插入模式;
-
`<
转到上一个视觉选择的开头; -
i(
插入左括号; - Esc 再次退出插入模式。
例如:
map q <ESC>`>a)<ESC>`<i(<ESC>
<小时 />根据另一条评论,我们有一个更简洁的解决方案:
map q c()<ESC>P
有两个相关的内置标记保持第一个的位置以及当前缓冲区中最后一个视觉对象选择的最后字符。要将光标移动到这些标记,请使用以下命令`<
和`>
分别(见:help `>
和:help `<
)。
当您处于Visual Selection
中时,单击 o。它将光标的位置更改为选择的另一端。然后 O 跳回去。
"用括号包围视觉选择区域"的最简单方法是:
c
将视觉选择的区域挂起来()
并将其P
回中间:c()<ESC>P
我建议在.vimrc
文件中定义一个新的视觉模式命令(例如,q
),如下所示:
:vmap q c()<ESC>P
这种方法也适用于可视矩形区域(<C-V>
):在每条块线周围放置(
和)
。
如果您只想围绕视觉选择,那么已经完成了工作,即由蒂姆·波普(Tim Pope)编写了一个名为surround
的插件。它用您喜欢的分隔符包围单词或视觉选择。
您的视觉选择,比如i like vim
点击S)
以获得(i like vim)
或S(
获得( i like vim )
,将其更改为[i like vim]
类型 cs]
(更改周围环境)并删除ds]
以最终获得i like vim
。
如果你不能使用Surrond.vim,这里有一种方法可以做到这一点:
- 使用
v
或V
进行视觉选择。 - 用
<Esc>
摆脱它. - 键入
`>a)<Esc>
以在所选内容的最后一个字符后插入右括号。 - 键入
`<i(<Esc>
以在所选内容的第一个字符之前插入左括号。