Vim 搜索/替换,%s 的含义

31
在 Vim 中,您可以通过以下方式搜索/替换文本。
:%s/old/new

%s是什么意思?


3
在vim中输入:h range,你会看到详细信息。如果你使用vim,我敢打赌这对你的日常编辑非常有帮助。 :) - Kent
7
这是一个非常基础的Vi(m)问题,看起来你是初学者。学习如何查找命令并浏览内置的:help,它很全面并提供了许多提示。你不会像学习其他编辑器那样快速地学会Vim,但如果你承诺不断学习,它将证明是一个非常强大和高效的编辑器。 - Ingo Karkat
我是vim的初学者。一旦掌握了这些命令,我看到它比大多数IDE更快的潜力,但对我来说,当我对所有内容都有牢固的理解时,记住它们就容易得多了!谢谢大家! - 9er
2
抱歉,没有%s的帮助。所以你必须已经知道答案才能获得range的帮助。因此这是一个非常好的初学者问题。 - hippietrail
3
@IngoKarkat 热门观点:SO不应该设置入门障碍,要求所有问题都必须超出初学者水平。只要问题没有被完全重复解决,我们应该欢迎各种能力的用户在这里提问和解决问题。对于一个人来说很直观和显然的东西对另一个人来说可能并非如此。 - Lou
4个回答

43

%:s命令(代表:substitute)运行的范围。 %本身是:1,$范围的缩写,意思是从第一行到缓冲区中的最后一行

Vim帮助文档有一些主题(用户手册-:help 10.3,参考手册-:help cmdline-ranges),描述了范围可以采用的形式。


17

:s 的语法(它是 :substitute 的缩写)如下:

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
%s/old/new/1

%范围表示“整个文件”。

这非常强大;如果您只想在第1行上进行替换,则可以使用:

%s/old/new/1
:1s/a/b/

或者,仅针对第1到第3行:
:1,3s/a/b/

一种非常有用的技巧是使用可视模式(V)突出显示行,然后使用:s只在您突出显示的行上进行替换。

参见::help [range]


2
:%s/old/new/

这将在整个文档中搜索"old"并用"new"替换每行的第一个实例。你可以使用:%s/old/new/g来替换所有出现的"old"为"new"。

(根据jamessan的评论更新了答案)


4
不完全正确。它将替换每行中第一个“old”出现的地方为“new”。如果要替换所有实例,需要在:s命令中加上g标志。 - jamessan
好的,我太习惯加上“g”选项了,以至于我认为它已经存在。 - GrandAdmiral

1

1
笔误,% 是整个缓冲区的范围,但 %s 不是。 :D - Kent

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