2

我很好奇是否有一种方法可以使用 vim 一次用引号括起几个单词。我正在使用 tpope 环绕并重复,但我想知道是否有类似的命令

3ysw"

所以从

one two three 

"one" "two" "three"
4

3 回答 3

5

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

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


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

qqysw"3wq

在这在您的q寄存器中之后,您可以调用2@q以对剩余的单词进行环境处理。

于 2018-08-05T13:28:08.373 回答
2

当您想引用三个单词时,从光标当前所在的单词开始,您可以执行以下操作:

bv3ec'<Ctrl+r>"'

b将光标放在当前单词的开头,v进入可视模式,3e在当前 3 个单词序列的末尾跳转,c剪切选择并进入插入模式,在此插入左引号'并按下<Ctrl+r>"以粘贴当前内容剪贴板缓冲区,在插入另一个封闭引号之前'

b如果您从光标在第一个单词的第一个字符开始,请省略前导。

于 2018-08-04T22:33:49.253 回答
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/”之类的内容时也很有用)

于 2018-08-19T18:29:34.643 回答