Answers:
:1,$s/\<\(\w*\)\>/\1("\L\1")/
这找到一个单词,\<(w*\)\>
然后按原样\1
和小写\L\1
s/ *\([A-Z]*\)/\1("\L\1")/
而是使用忽略前导空格。或领导任何事情。在这种情况下,\( \)
创建一个编号的捕获组\1
。
我自己用宏来做这件事。假设光标位于第一行的开头:
qqyeea("<C-R>0")<ESC>v%gu+q3@a
用这种方式打字要少得多,并且不需要你记住vim的正则表达式语法。通常,使用宏进行这种文本转换比使用替换命令要快得多。
打破我的解决方案:
qa
开始将宏记录到寄存器'a'中。ye
从光标的当前位置到字的末尾,将它存入“0和0”寄存器。(我只能通过0寄存器访问它,但它实际上存储在两者中)e
将光标移动到单词的末尾a
在光标之后进入插入模式(所以在单词和逗号之间)<C-R>0
。在插入模式中,<C-R>n
表示“插入寄存器n中的文本”。如果我正常地执行此任务(而不是以文本形式向其他人解释),我实际上<C-R>"
在这里使用,但是0
更容易在视觉上区别于文字“围绕它的人物。<ESC>
将我们恢复到正常模式。光标现在在结束时),这是我们在插入模式下输入的最后一个字符。v
进入视觉模式。%
将光标跳回到与我们当前所在的近括号匹配的左括号,因此我们的视觉选择现在涵盖了字符串("DRAFT")
。gu
将视觉选择的字符串转换为小写。这对视觉选择中的括号或引号没有影响。+
将光标前进到下一行的开头,准备再次运行同一组命令。q
完成录制宏。3@a
运行我们的宏'a'三次,从而重复我们在后续三行的第一行上所做的一切。
sed
Vim使用非常相似的正则表达式,所以...你会做sed
什么?