首页 > 代码库 > vim替换

vim替换

Vim替换

substitute命令: :[range]s/from/to/[flags]

from替换成to指定的字符串(from可为正则表达式,to可为空)

range:范围,可以通过 +、-设置相对偏移量 不写 : 默认为光标所在的行 . : 光标所在的行 n : 第n行 $ : 最后一行 ‘a : 标记a所在的行 .+1 : 当前光标所在行的下面一行 $-1 : 倒数第二行 m,n : 第m~n行 1,$ : 第1行到最后一行 1,. : 第1行到当前行 .,$ : 当前行到最后一行 ‘a,‘b : 标记a所在的行到标记b所在的行 % : 所有行(%表当前编辑的文件,#表前一次编辑的文件) ?chapter?:向上搜索,找到的第一个chapter(可以是正则表达式)所在的行 /chapter/:向下搜索,找到的第一个chapter(可以是正则表达式)所在的行

flags:标记,可以组合使用 空 : 只对指定范围内的第一个匹配项进行替换 g : 对指定范围内的所有匹配项进行替换 c : 在替换前请求用户确认 e : 忽略执行过程中的错误

i : 不分大小写

当前行: :s/from/to/ : 将当前行中的第一个from,替换成to,只替换一个 :s/from/to/g : 将当前行中的所有from都替换成to :s/from/to/gc : 将当前行中的所有from都替换成to,每次替换前询问 某一行: :.s/from/to/g : 在当前行进行替换操作 :ns/from/to/g : 在第n行进行替换操作 :$s/from/to/g : 在最后一行进行替换操作 某些行: :m,ns/from/to/g : 对第m行到第n行的内容进行替换 :1,$s/from/to/g : 对第一行到最后一行的内容进行替换 :1,.s/from/to/g : 对第一行到当前行的内容进行替换 :.,$s/from/to/g : 对当前行到最后一行的内容进行替换 :‘a,‘bs/from/to/g: 对标记a和b之间的行进行替换 所有行:

:%s/from/to/g : 对所有行的内容进行替换

分隔符: :s#from#to# :用#作为分隔符,from和to中可以有‘/‘

:s+from+to+ :用+作为分隔符,from和to中可以有‘/‘

\zs 匹配由此开始; 如/^/s\zsif,会匹配行首的"if",且忽略空白字符\ze 匹配到此为止; 如end\ze(if\|for),会在"endif"或"endfor"中匹配"end" \d查找任意位数的数字let 为变量赋值 \= 指明后面是一个表达式 | 用来分隔不同的命令; 如g 在匹配后面模式的行中执行指定的命令 例:下面一行把匹配到的"func(8)","func(3)",...替换成"func(0)","func(1)",...

:let n=0 | g/func(\zs\d+)\ze/s//\=n/ | let n+=1

在文本中删除或添加^M: :%s/^M$//g :s/headtail/head^Mtail/ "headtail"中间换行 表达式替换\=: :%s/^/\=line(".")-1 每行首添加行号(line(".")表当前行号,"-1"让它从0行开始) 保存匹配的内容\0(替换为整个匹配的部分),\1,...,\9(替换为"括号中"匹配的部分): :s/a\|b/\0t/g 将当前行的"a"或"b"全换成"at"或"bt"("\|"表"或") :s/([abc])([efg])/\2\1/g 当前行的"af fa be gc"会改为"fa fa eb gc"