如何在vim中获得正则表达式匹配的长度?

时间:2010-04-07 18:19:13

标签: regex vim

如果我想在下面的正则表达式的括号内得到每个匹配的长度,我该怎么做?:

^\(\-\+\s\)\+

我正在尝试使用以表格形式布局的数据来修改缓冲区中列的宽度。由于表格的前两行看起来像这样

 DESIGN_ID DESIGN_YEAR SOURCE_REFERENCE
---------- ----------- ----------------

我想使用正则表达式来查找每列的当前宽度。

1 个答案:

答案 0 :(得分:5)

那么,你想如何捕获它?

这将把它放在所有匹配行的开头:

:%s/^-\+\%(\s-\+\)*\s\?$/\=strlen(submatch(0)) . ': '. submatch(0)

\=允许您将vimscript表达式的结果替换为匹配的字符串。 submatch(0)是匹配的字符串(submatch(n)将是第n个组)。