云网牛站
所在位置:首页 > Linux教程 > Vim/Vi中查找和替换及区分大小写、搜索范围、替换整个单词、替代历史

Vim/Vi中查找和替换及区分大小写、搜索范围、替换整个单词、替代历史

2021-01-12 09:42:50作者:浦洪稿源:云网牛站

本文介绍在Linux操作系统Vim/Vi编辑器中查找和替换文本的内容:有基本查找和替换、区分大小写、搜索范围、替换整个单词、替代历史(History)及示例。掌握以下方法将帮助您在Vim中更好的查找和替换文本,使您可以快速更改文本。如果还没有安装Vim,可参考在RHEL 8/CentOS 8系统上安装和配置VIM文本编辑器一文。

Vim/Vi中查找和替换及区分大小写、搜索范围、替换整个单词、替代历史

 

基本查找和替换

在Vim中,可以使用:substitute (:s)命令查找和替换文本。

要在Vim中运行命令,您必须处于正常模式,这是启动编辑器时的默认模式,要从其他任何模式返回正常模式,只需按“Esc”键。

命令的一般形式如下:

:[range]s/{pattern}/{string}/[flags] [count]

该命令在[range]的每一行中搜索{pattern},并将其替换为{string},[count]是一个乘以命令的正整数。

如果没有给出[range]和[count],则仅替换当前行中找到的模式,当前行是光标所在的行。

例如,要在当前行中搜索字符串“foo”的第一个匹配项并将其替换为“bar”,可以使用:

:s/foo/bar/

要替换当前行中所有出现的搜索模式,请添加g标志:

:s/foo/bar/g

如果要搜索并替换整个文件中的模式,请使用百分比字符%作为范围,此字符表示从文件的第一行到最后一行的范围:

:%s/foo/bar/g

如果省略{string}部分,则将其视为空字符串,并删除匹配的模式,以下命令删除当前行中字符串“foo”的所有实例:

:s/foo//g

除了斜杠(/)之外,还可以使用其他任何非字母数字的单字节字符作为分隔符,当您在搜索模式或替换字符串中使用“/”字符时,此选项很有用:

:s|foo|bar|

要确认每个替换,请使用c标志:

:s/foo/bar/gc

返回:

replace with bar (y/n/a/q/l/^E/^Y)?

按y替换匹配项,或按l替换匹配项并退出,按n跳过,按q或Esc退出替换,使用a选项替换匹配项和所有其余匹配项,若要向下滚动屏幕,请使用CTRL+Y,向上滚动,请使用CTRL+E。

您还可以将正则表达式用作搜索模式,下面的命令将所有以'foo'开头的行替换为'Vim is the best':

:%s/^foo.*/Vim is the best/gc

^(脱字符)符号与行的开头匹配,.*与任意数量的任何字符匹配。

 

区分大小写

默认情况下,搜索操作区分大小写,搜索“FOO”将不匹配“Foo”。

要忽略搜索模式的大小写,请使用i标志:

:s/Foo/bar/gi

强制忽略大小写的另一种方法是在搜索模式后附加\c,例如,/Linux\c执行忽略大小写搜索。

如果更改了默认大小写设置,并且要执行区分大小写的搜索,请使用I标志:

:s/foo/bar/gi

模式之后的大写\C也会强制进行大小写匹配搜索。

 

搜索范围

如果未指定范围,则替换命令仅在当前行中运行。

范围可以是一行,也可以是两行之间的范围,行说明符之间用,或;字符,可以使用绝对行号或特殊符号指定范围。

例如,要在从第3行到第10行的所有行中将所有出现的“foo”替换为“bar”,可以使用:

:3,10s/foo/bar/g

该范围是包含范围的,这意味着该范围包括第一行和最后一行。

点.字符表示当前行,$美元符号表示最后一行,要在从当前行到最后一行的所有行中替换“foo”:

:.,$s/foo/bar/

也可以使用“+”或“-”符号来设置行说明符,其后是从前一个行号添加或减去的数字,如果省略符号后的数字,则默认为1。

例如,从当前行和接下来的四行开始,用“bar”替换每个“foo”,键入:

:.,+4s/foo/bar/g

 

替换整个单词

替代命令将模式作为字符串而不是整个单词查找,例如,如果您正在搜索“gnu”,则搜索结果匹配“gnu”嵌入较大词(例如“cygnus”或“magnum”)中的位置。

要搜索整个单词,请键入\>标记单词的开头,输入搜索模式,键入\>标记单词的结尾:

例如,要搜索单词“foo”,可以使用\<foo\>:

:s/\<foo\>/bar/

 

替代历史(History)

Vim会跟踪您在当前会话中运行的所有命令,要浏览历史记录以查找先前的替代命令,请输入:s并使用向上/向下箭头键查找先前的替代操作,要运行该命令,只需按Enter,您也可以在执行操作之前编辑命令。

 

例子

注释行(在行前添加#)从5到20:

:5,20s/^/#/

取消注释行从5到20,恢复以前的更改:

:5,20s/^#//

将“apple”,“orange”和“mango”的所有实例替换为“fruit”:

:%s/apple\|orange\|mango/fruit/g

删除每行末尾的空格:

:%s/\s\+$//e

注:其它类似的操作按上面的格式自由替换就行。

 

相关主题

玩转Linux必备的Vim技能,一文读懂Vim的安装和配置,学习之法

精选文章
热门文章