【问题标题】:Highlighting ascii tables突出显示 ascii 表
【发布时间】:2014-06-18 18:34:15
【问题描述】:

我生成的一些 (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'

你能想出一种更优雅的方法吗?我见过一些荧光笔(vim 除外)可以很好地突出显示表格...

【问题讨论】:

    标签: vim vim-syntax-highlighting


    【解决方案1】:

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

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

    然后,定义(这里再次简单化)模式来匹配表行,并标记这个contained,这样它只会匹配contains=它的其他语法区域。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 2011-06-06
      • 2015-12-21
      • 1970-01-01
      相关资源
      最近更新 更多