4

在Vim / Vi中查找和替换

 2 years ago
source link: https://www.myfreax.com/vim-find-replace/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文介绍了如何在Vim/Vi中查找和替换文本。

Vim是最受欢迎的命令行文本编辑器。 它预装在macOS和大多数Linux发行版上。 在Vim中查找和替换文本非常容易。

基本查找和替换

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

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

替换命令的一般形式如下:

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

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

如果未给出[range][count],则仅替换当前行中找到的pattern。 当前行是光标所在的行。

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

:s/foo/bar/

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

:s/foo/bar/g

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

:%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跳过,按qEsc退出。 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/

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

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

:5,20s/^/#/

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

:5,20s/^#//

将“苹果”,“橙色”和“芒果”的所有实例替换为“水果”:

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

删除每行末尾的尾随空格:

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

搜索和替换是Vim的强大功能,可让您快速更改文本。

如有任何疑问,请随时发表评论。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK