1、查找搜索
使用Vim(vi) 文本编辑器可以高效的进行文本内容的查找,可以使用行内查找或全文查找,具体如下:
1)行内搜索
行内搜索主要是单个字符搜索查找,可以用来快速移动光标的位置。
命令 | 说明 |
f | 可以进行行内搜索。 输入 |
F | 可以在反方向进行行内搜索, 输入 |
t | 也可以行内搜索,但是光标停留在符合条件的字符的前面。 输入 |
T | 可以在反方向行内搜索, 但是光标停留在符合条件的字符的下一个字符上。 输入 |
% | 可以搜索与之匹配的对应的 |
2)全文搜索
/
是VIM(vi)编辑器的模式搜索命令。键入/
后屏幕的底部会出现一行,同时一个斜扛会出现在底行的行首上,且光标被放置在斜扛之后。此时,可以在光标位置键入你需要搜索的模式。输入完成并按下ENTER键后,编辑器将开始从光标所在的位置起向文件尾部搜索你键入的模式。如果输入的模式被找到,光标将停留在找到的模式上,在找到一个匹配的模式后,如还需要搜索下一个匹配的模式,使用命令n
即可,如需找到上一个匹配的模式,则使用N
命令即可。
此外 ?
命令也是模式搜索命令。与/
的区别在于:/
是从光标当前所在位置向文件尾部搜索,而?
命令则是由光标当前所在位置向文件头部搜索。
注意:要在Vim中运行命令,须处于正常模式,要从其他任何模式返回正常模式,只需按Esc
键。
2、查找替换
使VIM(vi)编辑器对一个文本中有大量相同内容批量替换时,可以通过正则表达式灵活的查找替换指定内容。虽然需要会正则表达式的相关内容,但对于程序员还是很好用的功能。在Vim中,可以使用:substitute
(:s
)命令查找和替换文本。
命令格式如下:
:[range]s/{pattern}/{string}/[flags] [count]
选项说明:
选项 | 说明 |
range | 指的是范围,如1,7 指从第一行至第七行, 1,$ 指从第一行至最后一行,也就是整篇文章, 也可以 % 代表。 % 是目前编辑的文章, # 是前一次编辑的文章。 |
pattern | 就是要被替换的字串,可以用正则表达式来表示。 |
string | 将 pattern 由 string 所替换。 |
c | confirm,每次替换前询问。 |
e | 不显示 error。 |
g | 不询问,整行替换 |
i | ignore 不分大小写。 |
例如,
1)当前行中搜索字符串cjavapy的第一个匹配项并将其替换为levi
:s/cjavapy/levi/
2)使用g替换当前行中所有匹配字符串
:s/cjavapy/levi/g
3)使用%替换全文中所有匹配字符串并区分大小写
:%s/cjavapy/levi/gi
4)如果省略{string}部分相当于删除匹配字符串
:s/cjavapy//g
5)除斜杠(/)外也可用其他任何非字母数字的单字节字符作为分隔符
:s|cjavapy|levi|
注意:当在搜索模式或替换字符串中包含/字符时,此选项很有用。
6)使用c标志需要确认替换
:s/cjavapy/levi/gc
注意:按y
替换匹配项,或按l
替换匹配项并退出,按n
跳过,按q
或Esc
退出替换,使用a
选项替换匹配项和所有其余匹配项,若要向下滚动屏幕,可以使用CTRL+Y
,向上滚动,可以使用CTRL+E
。
7)要搜索整个单词,需要键入\>标记单词的开头,键入\>标记单词的结尾
:s/\<cjavapy\>/levi/
8)注释行(在行前添加#)从10到20
:10,20s/^/#/
9)取消注释行从10到20
:10,20s/^#//
10)删除每行末尾的空格
:%s/\s\+$//e
3、使用正则表达式替换
1)元字符
元字符 | 说明 |
. | 匹配任意字符 |
[abc] | 匹配方括号中的任意一个字符,可用-表示字符范围。如[a-z0-9]匹配小写字母和数字 |
[^abc] | 匹配除方括号中字符之外的任意字符 |
\d | 匹配阿拉伯数字,等同于[0-9] |
\D | 匹配阿拉伯数字之外的任意字符,等同于[^0-9] |
\x | 匹配十六进制数字,等同于[0-9A-Fa-f] |
\X | 匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f] |
\l | 匹配[a-z] |
\L | 匹配[^a-z] |
\u | 匹配[A-Z] |
\U | 匹配[^A-Z] |
\w | 匹配单词字母,等同于[0-9A-Za-z_] |
\W | 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_] |
\t | 匹配<TAB>字符 |
\s | 匹配空白字符,等同于[\t] |
\S | 匹配非空白字符,等同于[^\t] |
\* | 匹配* 字符 |
. | 匹配. 字符 |
\/ | 匹配 / 字符 |
\ | 匹配 \ 字符 |
\[ | 匹配 [ 字符 |
\] | 匹配 ] 字符 |
* | 匹配0-任意个 |
\+ | 匹配1-任意个 |
\? | 匹配0-1个 |
\{n,m} | 匹配n-m个 |
\{n} | 匹配n个 |
\{n,} | 匹配n-任意个 |
\{,m} | 匹配0-m个 |
$ | 匹配行尾 |
^ | 匹配行首 |
\< | 匹配单词词首 |
\> | 匹配单词词尾 |
2)分组替换
在正则式中以\(和\)括起来的正则表达式,之后替换时可以用\1、\2等变量来访问\(和\)中的内容。若将 data1 data2 修改为 data2 data1 。
例如,
:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1 "
3)删除行尾空格
:%s/\s+$//g
4)删除行首多余空格
:%s/^\s*//
5)删除沒有內容的空行
:%s/^$//
6)删除包含有空格组成的空行
:%s/^\s*$//
7)删除以空格或TAB开头到结尾的空行
:%s/^[ |\t]*$//