vim 分组和交替(grouping and alternation)
交替(alternation)操作起到的是“或”的作用,比如,carrot\|parrot
同时匹配 carrot和parrot
分组(grouping)用于将多个字符放在一个组里,这样做有两个好处。首先,分组可以与其他正则表达式组合使用,比如 \(c\|p\)arrot
是一种同时匹配 carrot
和 parrot
的更精准的方式。有的时候用于交换(替换)两个字符的位置十分有用
符号 | 说明 |
\| | alternation |
\(\) | grouping |
假设存在一下内容:
1
2
3
4
5
6
7
8
9
10
cat test.txt
table "t1"
table "t2"
table "t3"
table "t4"
table "t5"
table "t6"
t33a
table "ttt"
我们想要将文本 table "t1-t6"
全部替换为 table "ttt"
,这个时候就可以使用 vim/nvim 的分组来快速实现替换:
1
:%s/\v(table) (\".*\")/\1 \"ttt\"/g
每一个圆括号’()’表示一个分组,会将匹配的内容赋值给寄存器’\1’, \1
表示使用寄存器 ‘\1’ 中的内容,依此类推。
这样我们就可以快速实现全文的替换。
如果我们想交换指定内容的位置,也可以利用 vim/nvim 的 grouping 功能:
我们利用上文替换之后文本继续演示:
1
:%s/\v(table) (\"ttt\")/\2 \1/g
如果利用好 vim/nvim 的 grouping 和 alternation 功能可以快速操作文本,节约时间。
本文由作者按照
CC BY 4.0
进行授权