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

mis*_*sfo 3 regex vim

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

^\(\-\+\s\)\+
Run Code Online (Sandbox Code Playgroud)

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

 DESIGN_ID DESIGN_YEAR SOURCE_REFERENCE
---------- ----------- ----------------
Run Code Online (Sandbox Code Playgroud)

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

ram*_*ion 5

那么,你想如何捕获它?

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

:%s/^-\+\%(\s-\+\)*\s\?$/\=strlen(submatch(0)) . ': '. submatch(0)
Run Code Online (Sandbox Code Playgroud)

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