Vim替代命令:%s/old/new/g
将所有出现的old
替换为new
。但我只想在不以#
开头的行中进行此替换。我的意思是我的文件中有一些以#开头的行(称为注释行),我想在搜索替换中排除这些行。有什么办法吗?
答案 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
)命令似乎更安全,因为它仅在行首检查#
。但是根据使用情况,这三种方法都具有优势