我很好奇是否有一种方法可以使用 vim 一次用引号括起几个单词。我正在使用 tpope 环绕并重复,但我想知道是否有类似的命令
3ysw"
所以从
one two three
到
"one" "two" "three"
您可以用 直观地选择范围v3e,然后在其上运行替换命令:(:s/\v(\w+)/"\1"/g范围'<,'>应自动插入)。
不过,就个人而言,我宁愿用 包围一个词ysw",然后再做w.w.(根据需要重复)。
或者,记录一个执行两个步骤的宏(围绕并移动到下一个单词),然后调用它 n 次:
qqysw"3wq
在这在您的q寄存器中之后,您可以调用2@q以对剩余的单词进行环境处理。
当您想引用三个单词时,从光标当前所在的单词开始,您可以执行以下操作:
bv3ec'<Ctrl+r>"'
b将光标放在当前单词的开头,v进入可视模式,3e在当前 3 个单词序列的末尾跳转,c剪切选择并进入插入模式,在此插入左引号'并按下<Ctrl+r>"以粘贴当前内容剪贴板缓冲区,在插入另一个封闭引号之前'。
b如果您从光标在第一个单词的第一个字符开始,请省略前导。
另一种替代选择
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/”之类的内容时也很有用)