如何在vim中用旧字符串+附加字符串替换字符串

时间:2016-06-24 11:42:16

标签: regex vim

这是我文件中的文字,我正在用vim编辑:

enter image description here

我想将其更改为以下内容:

enter image description here

我已尝试使用此正则表达式:%s/^.*$/\g<0>,\g<0>/g,但它无效..

4 个答案:

答案 0 :(得分:3)

您可以通过以下替换来实现这一目标:

:%s/^.*$/&,&/
         ^ ^ 

^.*$模式将匹配整行,&是整个匹配的反向引用。因此,替换是插回整个匹配,逗号,以及整个匹配。

注意:此^模式中的$^.*$可以省略,但很多人更喜欢在模式中将其明确保留促进模式可读性和进一步的模式测试。

如果您想避免匹配,则可以选择:

:%s/.\+/&,&/
    ^^^

.\+将匹配1个或多个字符。

答案 1 :(得分:3)

使用:s

%s/.*/&,&/

请注意

  • 你不需要^ and $,因为正则表达式是贪婪的。
  • 您也不需要g标志。
  • 如果你想打高尔夫球,你不需要最后/

或使用normal命令:

%norm! yaWA,^R"

%norm! yg_A,^R"

^R,按<c-v><c-r>

答案 2 :(得分:1)

不使用正则表达式的另一种方法是在更改第一行时录制宏,然后播放宏以更改其余行。

ggqay$A,<ESC>p+q4@a

说明:
gg将光标移动到第一行的开头
qa开始录入注册a
y$复制该行 A转到行尾的插入模式
,<ESC>插入逗号并返回正常模式
p粘贴副本
+将光标移动到下一行的开头
q停止录制 4@a播放宏四次以更改接下来的四行。

答案 3 :(得分:-1)

逐一执行:

:%s/abc/abc,abc/g
:%s/123/123,123/g
:%s/this/this,this/g
:%s/them/them,them/g
:%s/my/my,my/g

同样,用所需的字符串替换字符串以操作任何字符串。