vim搜索替换某些特定行

时间:2018-10-15 08:15:02

标签: regex vim replace

Vim替代命令:%s/old/new/g将所有出现的old替换为new。但我只想在不以#开头的行中进行此替换。我的意思是我的文件中有一些以#开头的行(称为注释行),我想在搜索替换中排除这些行。有什么办法吗?

3 个答案:

答案 0 :(得分:9)

您应该将其与g(请参阅help :global)命令混合使用:

:%g/^[^#]/s/old/new/

答案 1 :(得分:5)

:v/^#/s/old/new

应该做的工作。查看:h :v了解详情。

答案 2 :(得分:3)

托马斯的回答很好。另一种方法是在后面进行消极查找:

:%s/\(#.*\)\@<!old/new/g

这些方法匹配每个不以old开头的#,而Thomas的方法匹配不以#开头的每一行,然后匹配该行的每个old

Kent的解决方案更加优雅。它使用:v:g!相同。它匹配以#开头的每一行,然后在每 other 行上运行命令。这具有使正则表达式变得更容易的优点。在您的用例中,不匹配的正则表达式是很容易的,但是与不匹配的条件相比,构建正则表达式来匹配条件通常更容易。因此:v命令在这里有帮助。

对于您而言,global(其他两个答案都在使用global)命令似乎更安全,因为它仅在行首检查#。但是根据使用情况,这三种方法都具有优势