在vim中一次用引号将几个单词引起来

时间:2018-08-04 22:12:16

标签: vim surround

我很好奇是否有办法用vim一次用引号将几个单词括起来。我正在使用tpope环绕声并重复播放,但是我想知道是否有

这样的命令
3ysw"

所以来自

one two three 

"one" "two" "three"

3 个答案:

答案 0 :(得分:4)

您可以使用v3e直观地选择范围,然后在其上运行替换命令::s/\v(\w+)/"\1"/g(应该自动插入范围'<,'>)。

不过,就我个人而言,我宁愿用ysw"围住一个词,然后再做w.w.(根据需要重复多次)。


或者,记录一个同时执行两个步骤(环绕并移动到下一个单词)的宏,然后将其调用n次:

qqysw"3wq

将其保存在q寄存器中之后,您可以调用2@q对其余单词进行环绕。

答案 1 :(得分:1)

如果要引用三个单词(从光标当前所在的单词开始),可以执行以下操作:

bv3ec'<Ctrl+r>"'

b将光标放在当前单词的开头,v进入可视模式,3e跳转到当前3单词序列的结尾,c剪切选择并进入插入模式,在此插入左侧的引号',然后按<Ctrl+r>",以便粘贴剪贴板缓冲区的当前内容,然后再插入其他的引号'

如果光标从第一个单词的第一个字符开始,请省略开头的b

答案 2 :(得分:0)

另一个替代选项

s,\w\+,"&",g

s ............. substitute current line (add %s for the whole file)
\w\+ .......... one word or more
"&" ........... & represents the whole match on the search part
g ............. every occurrence on the line

OBS:使用替换时,我们可以使用其他定界符以便于键入。 (在搜索“ / my / pattern /”之类的内容时也很有用)