Vim字符匹配交换
把文中的所有字符串“a..bc <——-> xy….z”替换为“xy….z <——-> a..bc”可以进行以下写法1:
:%s/\(a.*bc\)\(.*\)\(xy.*z\)/\3\2\1/gc
以上表达式中可以拆开几部分理解:
%s
全文查找\(a.*bc\)
第1
个独立内容块:使用通配符.*
匹配查找以a
开头,bc
结尾的字符串,并以括号()
括起来作为第1
个独立内容的块,反斜杠\
在这里是转义符\(.*\)
第2
个独立内容块:使用通配符.*
匹配任意内容,并以括号()
括起来作为第2
个独立内容的块,反斜杠\
在这里同样是转义符\(xy.*z\)
第3
个独立内容块:使用通配符.*
匹配查找以xy
开头,z
结尾的字符串,并以括号()
括起来作为第3
个独立内容的块,反斜杠\
在这里同样是转义符\3\2\1
这里意思是把第3
个和第1
个内容块交换位置,第2
个内容块位置不变,即内容位置交换gc
以询 问确认方式进行全局替换