在vi/vim中搜索字符串并添加行

16
我想编辑一个配置文件,并且希望当匹配到特定字符串时,在新的一行上添加一行特定的代码。我搜寻了很多资料,但找到的都是搜索和替换的方法,而我需要的是搜索并追加的方法。
3个回答

18

就我个人而言,我认为对于这个问题,使用":g"命令可能比":s"更好。

:g/key/norm owhat ever you want

会使文本变成:

foo
bar
key
foo2
bar2
key2
blah

目标:

foo
bar
key
what ever you want
foo2
bar2
key2
what ever you want
blah

如果您想在包含模式的行之上添加新行,只需将小写字母"o"更改为大写字母"O"。


比“norm o”更好的是“put ='你想要的任何内容'”。 - Benoit
如果您设置了autoindent选项,则norm onorm O具有可能的优势,即它们将使用与您搜索的行相同的缩进。 - bdesham

15

vim 中,\r 表示换行符。所以你可以这样做:

%s/search string/&\rnew code/

1
请澄清一下,使用“substitute”命令时,是否需要在“&”符号后添加内容以进行追加?或者它是否包含您要替换的行,因此您可以使用“%s/search string/\rnewcode&/”在前面添加内容? - V.S.
@Jaypal %s/^.*search string.*$/&\rnew code/ 可能更好?你的方法可能会破坏原始行。例如,如果该行是 "search string=xyz" 或者 "foosearch string=barsearch string"。 - Kent
1
\r 是替换字符串中的换行符。在搜索模式中,\n 是换行符。 - Benoit
@VolatileStorm &符号插入搜索命中结果。 - Hanan N.

0

这是我会做的:

:g/specific string/s/.*/&specific line of code

g 命令获取所有包含 特定字符串 的行,然后对这些行应用 s 替换命令。 s 命令将整行替换为其内容加上 特定代码行

希望有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接