Vim 正则表达式用于选择一行中第 N 列之后的所有内容

Vim 正则表达式用于选择一行中第 N 列之后的所有内容

我正在寻找一个正则表达式,它将选择从第 51 个字符到行末的所有文本,这些文本的长度超过 50 个字符。

我需要正则表达式不包含该行的前 50 个字符。

这样做的原因是向 gitcommit.vim 语法文件添加一些内容,以便当我的摘要超过 50 个字符时更加明显。设置ctermbg=red或类似的东西。

我知道我可能会做一些事情,比如设置ctermbg=red整个第一行,然后让gitcommitSummary语法组将背景设置回前 50 个字符,但这个问题引起了我的兴趣,我想知道是否有办法让正则表达式跳过查看该行的前 X 个字符。

我正在尝试类似下面的内容,但它只是一个零宽度断言,所以显然不起作用。有什么想法吗?

# This just highlights all lines exceeding 50 characters
/^\(.\{50\}\)\@=.*$

编辑:刚刚意识到 gitcommit.vim 文件实际上使用“nextgroup”对此进行了语法突出显示,只是默认情况下将其注释掉了。所以我达到了最初的目标,但我仍然想知道是否可以使用正则表达式来做到这一点。

答案1

Vim 正则表达式中用于匹配特定列的原子是 N,\%Nc其中 N 是列号。请参阅

:help /\%c

为了匹配虚拟列号,原子是\%Nv。参见

:help /\%v

要搜索第 50 列之后的内容,您可以使用

/\%>50v

表示>匹配第 50 列之后的任意列。您也可以在 :match 命令中使用该正则表达式,如下所示:

:match ErrorMsg /\%>50v/

相关内容