Vim 语法高亮长度分隔字段

Vim 语法高亮长度分隔字段

我正在尝试为 SVN 转储文件编写一个 vim 语法文件。我无法弄清楚的部分是这样的部分:

Fooprop: Val1
Text-content-length: 20
Barprop: Val2
                                       <- Blank line
abcdefghi
abcdefghi

Next-item-prop: Val3

如何设置一条语法规则,表示“‘文本内容长度:N’后面的第一个空行后有 N 个字符,其中 N 是数字”?

答案1

您需要在不同的正则表达式中引用文本长度。由于 Vim(与 Perl 不同)不允许在正则表达式中评估 Vimscript 表达式,因此您需要求助于元编程,即动态构建语法规则:

:execute 'syntax match svndumpData /^\n\_.\{' . length . '}/'

这个简单的草图用于多次\_.匹配任何字符(包括换行符)\{N}。您需要注意换行符的长度(CR-LF 与 LF)和编码(字符数不一定等于表示它们的字节数!)

这是有效的,因为每次检测都会获取一个语法插件,然后该语法将应用于当前缓冲区。

选择

由于这相当复杂,并且如果您有字节计数(不存在正则表达式原子)而不是字符长度,则可能无法工作,因此始终存在实用的 80% 解决方案,该解决方案忽略包含的字符计数并仅定义语法区域周边房产部分。它并非在所有情况下都是正确的,但可能适用于大多数数据。

相关内容