我可以:%s/<search_string>/<replace_string>/g用来替换文件中的字符串,或者:s/<search_string>/<replace_string>/替换当前行.
如何在vim中选择和替换选择行中的单词?
示例:从行替换文本6-10,14-18但不从中替换11-13.
小智 313
全部替换:
:%s/foo/bar/g
Run Code Online (Sandbox Code Playgroud)
查找每个'foo'(在所有行中),并将其替换为'bar'.
对于特定的行:
:6,10s/foo/bar/g
Run Code Online (Sandbox Code Playgroud)
对于从第6行到第10行的所有行,将每个'foo'更改为'bar'.
Ing*_*kat 227
该:&&命令使用相同的标志重复最后一次替换.您可以为其提供额外的范围(并根据需要连接多个):
:6,10s/<search_string>/<replace_string>/g | 14,18&&
Run Code Online (Sandbox Code Playgroud)
如果你有很多范围,我宁愿使用一个循环:
:for range in split('6,10 14,18')| exe range 's/<search_string>/<replace_string>/g' | endfor
Run Code Online (Sandbox Code Playgroud)
Att*_* O. 50
作为旁注,只需在其中一种视觉模式中突出显示要查找/替换的行,而不必输入行号:
VISUAL模式(V)VISUAL BLOCK模式(Ctrl+ V)VISUAL LINE模式(Shift+ V,最适合您的情况)选择要替换的行后,键入以下命令:
:s/<search_string>/<replace_string>/g
Run Code Online (Sandbox Code Playgroud)
您会注意到该范围'<,'>将自动为您插入:
:'<,'>s/<search_string>/<replace_string>/g
Run Code Online (Sandbox Code Playgroud)
这里'<仅表示第一个突出显示的行,'>表示最后突出显示的行.
请注意,在处于NORMAL模式时行为可能是意外的:'<并'>指向在其中一个VISUAL模式中完成的最后一个突出显示的开始和结束.相反,在NORMAL模式中,.可以使用特殊行号,这仅表示当前行.因此,您只能在当前行上查找/替换,如下所示:
:.s/<search_string>/<replace_string>/g
Run Code Online (Sandbox Code Playgroud)
另外需要注意的是,:在范围和find/replace命令之间插入第二个没有坏处,换句话说,这些命令仍然有效:
:'<,'>:s/<search_string>/<replace_string>/g
:.:s/<search_string>/<replace_string>/g
Run Code Online (Sandbox Code Playgroud)
Lie*_*ers 27
您可以使用两个查找/替换序列来完成此操作
:6,10s/<search_string>/<replace_string>/g
:14,18s/<search_string>/<replace_string>/g
Run Code Online (Sandbox Code Playgroud)
第二次你需要调整的是范围所以不是全部输入,我会记得最后一个命令并只编辑范围
小智 26
:%s/search\|search2\|search3/replace/gci
Run Code Online (Sandbox Code Playgroud)
g => 全局搜索
c => 首先要求确认
i => 不区分大小写
:%s/search/replace/g
Run Code Online (Sandbox Code Playgroud)
:%s/search/replace/gc
Run Code Online (Sandbox Code Playgroud)
:%s/search/replace/gci
Run Code Online (Sandbox Code Playgroud)
arn*_*nav 14
VI搜索并替换命令示例
我们假设您想要找到一个名为"foo"的单词并替换为"bar".
第一[Esc]击键
键入:(冒号)后跟%s/foo/bar/并按[Enter]键
:%s/foo/bar/
SMJ*_*SMJ 14
如果您对所有线路都会受到影响感到困惑,请在下方使用
:%s/foo/bar/gc
Run Code Online (Sandbox Code Playgroud)
将每个'foo'更改为'bar',但首先要求确认.按'y'表示是,'n'表示否.别忘了在那之后保存
:wq
Run Code Online (Sandbox Code Playgroud)
我们不需要麻烦输入当前的行号。
如果你想改变每foo到bar当前行(.)和两个下一行(+2),简单地做:
:.,+2s/foo/bar/g
Run Code Online (Sandbox Code Playgroud)
如果要在更改之前确认,请替换g为gc:
:.,+2s/foo/bar/gc
Run Code Online (Sandbox Code Playgroud)
回答这个问题:
:40,50s/foo/bar/g
将第 40 行到第 50 行(含)之间的这些行中的 foo 替换为 bar,当执行此命令时,您当前可以在任何行中。
:50,40s/foo/bar/g
也可以,vim 会要求你确认,然后为你做替换,就像你输入了第一个命令一样。
:,50s/foo/bar/g
将当前所在行和第 50 行(含)之间的这些行中的 foo 替换为 bar。(如果你在第 50 行之后,vim 会再次要求确认)
为了明确vim和Eclipse的vrapper插件之间的区别:
请注意,在varpper中
:,50s/foo/bar/g命令将不起作用。
:50,40s/foo/bar/g无需请求确认即可工作。
(适用于 Vrapper 版本 0.74.0 或更早版本)。