文章

vim 分组和交替(grouping and alternation)

交替(alternation)操作起到的是“或”的作用,比如,carrot\|parrot 同时匹配 carrot和parrot

分组(grouping)用于将多个字符放在一个组里,这样做有两个好处。首先,分组可以与其他正则表达式组合使用,比如 \(c\|p\)arrot 是一种同时匹配 carrotparrot 的更精准的方式。有的时候用于交换(替换)两个字符的位置十分有用

符号 说明
\| 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 进行授权

© TheDarkStarJack. 保留部分权利。

[本站总访问量次] [本站访客数人次] [本文总阅读量次]

本站采用 Jekyll 主题 Chirpy