突出显示ascii表

时间:2014-05-02 06:18:07

标签: vim vim-syntax-highlighting

我生成的一些(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除外)很好地突出了桌子......

1 个答案:

答案 0 :(得分:0)

您可以使用 containsmaint ,cp解决此问题。 :help :syn contains。首先,定义一个跨越表所包含的整个行范围的区域。我在这里使用了一个简单的模式作为页眉/页脚行,并断言紧靠上方/下方(在相邻行中)没有|;根据需要进行改进:

syn region tableRegion start="|\@<!\n+[-+]*+$" end="^+[-+]*+\n|\@!" contains=tableRow

然后,定义(再次,这里简单化)模式以匹配表行,并标记此contained,因此它仅匹配contains=其他语法区域内。

syn match tableRow "^|.*|$" contained