我生成的一些(ascii)报告包含ascii表,如下所示:
+------+------+------+
| col1 | col2 | col3 |
+======+======+======+
| bla | bla | bla |
| bla | bla | bla |
| bla | bla | bla |
+------+------+------+
我试图找到一种方法来使用vim语法文件突出显示这些表。简单的突出显示就足够了 - 无需区分|
,=
,+
和-
。但是,我不想突出表格中的单词(只有骨架),我不想在表格外突出显示-
,=
符号(等)。
vim语法文件的问题在于它们无法确定相对于给定点“向上”或“向下”的内容。我可以只突出显示每行,例如,这样的行:
+------+------+------+
即使他们没有创建好的表,但问题是这样的行:
| col1 | col2 | col3 |
可能与非表格代码混合,如此Python代码:
x = y\
| z | u | v # | is here for 'or'
你能想到更优雅的方式吗?我见过ome荧光笔(vim除外)很好地突出了桌子......
答案 0 :(得分:0)
您可以使用 containsmaint ,cp解决此问题。 :help :syn contains
。首先,定义一个跨越表所包含的整个行范围的区域。我在这里使用了一个简单的模式作为页眉/页脚行,并断言紧靠上方/下方(在相邻行中)没有|
;根据需要进行改进:
syn region tableRegion start="|\@<!\n+[-+]*+$" end="^+[-+]*+\n|\@!" contains=tableRow
然后,定义(再次,这里简单化)模式以匹配表行,并标记此contained
,因此它仅匹配contains=
其他语法区域内。
syn match tableRow "^|.*|$" contained