我可以做:%s/<search_string>/<replace_string>/g替换跨文件的字符串,或:s/<search_string>/<replace_string>/替换当前行。
:%s/<search_string>/<replace_string>/g
:s/<search_string>/<replace_string>/
如何在vim中选择和替换选择行中的单词?
示例:替换行6-10, 14-18中的文本,而不是11-13中的文本。
6-10
14-18
11-13
您可以使用两个查找/替换序列来完成此操作
:6,10s/<search_string>/<replace_string>/g :14,18s/<search_string>/<replace_string>/g
第二次你需要调整的是范围,所以我不会把它全部敲出来,我会回忆起最后一个命令,只编辑范围
替换所有:
:%s/foo/bar/g
找到'foo'(在所有行中)的每个出现,并将其替换为'bar'。
具体线路:
:6,10s/foo/bar/g
将从第6行到第10行的所有行中的每个'foo'更改为'bar'。
:&&命令使用相同的标志重复最后一次替换。你可以提供额外的范围(s)到它(和连接尽可能多的你喜欢):
:&&
:6,10s/<search_string>/<replace_string>/g | 14,18&&
如果你有很多范围,我宁愿使用循环:
:for range in split('6,10 14,18')| exe range 's/<search_string>/<replace_string>/g' | endfor
作为旁注,不必输入行号,只需突出显示你想要在其中一种可视模式中查找/替换的行:
VISUAL
VISUAL BLOCK
VISUAL LINE
选择要替换的行后,键入命令:
:s/<search_string>/<replace_string>/g
你会注意到范围'<,'>会自动为你插入:
'<,'>
:'<,'>s/<search_string>/<replace_string>/g
这里'<仅仅表示第一行突出显示, '>表示最后一行突出显示。
'<
'>
注意,在NORMAL模式下,这种行为可能是意想不到的:'<和'>指向在VISUAL模式中完成的最后一次高亮的开始和结束。相反,在NORMAL模式中,可以使用特殊的行号.,这仅仅意味着当前行。因此,你只能在当前行中查找/替换,就像这样:
NORMAL
.
:.s/<search_string>/<replace_string>/g
另一件需要注意的事情是,在range和find/replace命令之间插入第二个:没有伤害,换句话说,这些命令仍然有效:
:
:'<,'>:s/<search_string>/<replace_string>/g :.:s/<search_string>/<replace_string>/g
/sys/sim/source/gm/kg/jl/ls/owow/lsal /sys/sim/source/gm/kg/jl/ls/owow/lsal /sys/sim/source/gm/kg/jl/ls/owow/lsal /sys/sim/source/gm/kg/jl/ls/owow/lsal /sys/sim/source/gm/kg/jl/ls/owow/lsal /sys/sim/source/gm/kg/jl/ls/owow/lsal /sys/sim/source/gm/kg/jl/ls/owow/lsal /sys/sim/source/gm/kg/jl/ls/owow/lsal
假设你想用其他信息替换上面的内容。
# EYZ0
在这上面的将被替换为(sys.pkg.mpu.umc.kdk.)。
sys.pkg.mpu.umc.kdk.
VI搜索和替换命令示例
假设你想找到一个叫“foo”的单词,并将其替换为“bar”。
首先按[Esc]键
[Esc]
输入:(冒号),然后输入%s/foo/bar/,然后按[Enter]键
%s/foo/bar/
通过视觉选择指定范围是可以的,但当有非常 对象可以选择的几行简单操作 操作符最好是将这些命令作为操作符应用 遗憾的是,这不能通过标准vim命令完成。你可以做排序 的解决方案!(filter)操作符和任何文本对象。为 例如,要将操作应用于一个段落,您可以这样做:
!ip
这必须读作“应用运算符!”在一个段落里。过滤器 操作符启动命令模式并自动插入行范围 后面跟着一个字面的“!”,你可以在后面删除。 如果你将此应用于以下段落:
1 2 Repellendus qui velit vel ullam! 3 ipsam sint modi! velit ipsam sint 4 modi! Debitis dolorum distinctio 5 mollitia vel ullam! Repellendus qui 6 Debitis dolorum distinctio mollitia 7 vel ullam! ipsam 8 9 More text around here
按“!”Ap”会是这样的:
:.,.+5
作为'。'(点)表示当前线,电流之间的范围 行和后面的5行将用于操作。现在你可以添加
此外,如果您喜欢使用语义文本对象来选择 操作范围,你可以检查我的插件 EXtend.vim可以做同样的事情
在vim中,如果你不清楚哪些行会受到影响,请使用下面的方法
:%s/foo/bar/gc
:wq
我们不需要输入当前的行号。
如果你想改变每个foo到bar的当前行(.)和接下来的两行(+2),简单地做:
foo
bar
+2
:.,+2s/foo/bar/g
如果你想在修改之前确认,用gc替换g:
gc
g
:.,+2s/foo/bar/gc
要回答这个问题:
在第40行和第50行(包括在内)之间的这些行中,将foo替换为bar,当执行此命令时,您当前可以在任何行中。
同样有效,vim将要求您确认,然后为您执行替换,就像您已经输入了第一个命令一样。
在你当前所在行和第50行(包括第50行)之间的这些行中,用bar替换foo。(如果你排在第50行之后,vim会再次要求确认)
为了明确vim和Eclipse的vrapper插件的区别:
注意在varpper中
:,50s/foo/bar/g命令将不起作用。
:,50s/foo/bar/g
:50,40s/foo/bar/g将在不要求确认的情况下工作。
:50,40s/foo/bar/g
(适用于Vrapper 0.74 4.0或更老版本)。
:%s/search\|search2\|search3/replace/gci
g =比;全球搜索
c =比;先要求确认
我=比;不分大小写
:%s/search/replace/g
:%s/search/replace/gc
:%s/search/replace/gci