g:表示查询所有
c:表示替换前询问
i:表示忽略大小写
%:是通配符,匹配所有行
$:表示定位到最后一行
.:表示定位到当前光标位置所在的行
0:表示第一行,既文首
str1支持使用正则表达式(示例中\d\+)
str2省略表示删除搜索到的str1字符串,:s/str1/和s/str1//结果相同
在替换操作中案例:
vim替换操作
vim命令行模式支持各种替换操作,列一些常用的模式:
:s/str1/str2
搜索光标所在行第一个str1字符串,并替换为str2
:s/str1/str2/g
搜索光标所在行所有的str1字符串,全部替换为str2
:s/str1/str2/ig
搜索光标所在行所有的str1串(忽略大小写),并全部替换为str2
:%s/str1/str2/cg
搜索全文中所有的str1字符串,全部替换为str2,每次替换时会询问
:1,10s/str1/str2/g
查询第一行到第十行中所有的str1,并替换为str2
:0,.s/str1/str2/g
查询文首到当前光标位置之间所有的str1为str2
:.,$s/str1/g
删除光标所在当前行到文尾的所有str1字符串(即将所有的str1替换为空)
:5s/\d\+/123/g
将第五行中的所有数字串替换为123
其中:
:s/str1/str2/gci 是固定格式
替换全文中所有的字符串
%s/str1/str2/g
换行的搜索/替换/输入
换行在Vim中的行为很特殊也不够一致,需要单独讨论一下。
首先区分一下\r和\n:
前者是回车(Carriage Return),在Vim中可通过<c-k>CR输入,显示为^M。
后者是换行(New Line),在Vim中通过<CR>(回车)键输入,显示为回车并换行;
所以对于Windows风格换行(\r\n)在Vim中会在每行结尾显示^M。
替换
注意使用:s命令替换为换行(New Line)时,应当使用\r(相当于回车键)而不是\n。
例如将所有逗号替换为换行:
1
:%s/,/\r/g
如果使用\n则目标会被替换为空字符NULL(显示为^@)。
将DOS风格换行(\r\n)的文件转为Unix风格换行(\n)其实很简单,不需要手动查找替换:
1
2
:set fileformat=unix
:w
搜索
在搜索模式(/)搜索换行时仍然应当使用\n字符,因为Vim的换行(Unix风格)确实是\n而不是\r\n。例如:
1
/foo\nbar
可以匹配到所有的:
1
2
foo
bar
网友评论