代码之家  ›  专栏  ›  技术社区  ›  AlBlue RACGAMERUP

如何使用Vim语法文件将单行注释折叠到一个区域中?

  •  3
  • AlBlue RACGAMERUP  · 技术社区  · 15 年前

    我正在整理一个用于编辑Java清单文件的语法( at github ,如果有人感兴趣的话)。我正在尝试折叠多个单行注释(我现在正在匹配这些注释) syntax match manifestComment "#.*" ). 但是,如果我尝试使用一个语法区域,那么整个文件将被标记,整个文件将折叠。

    我要达到的目标是:

    # A comment
    # Another comment
    # A third comment
    Manifest-Version: 1
    

    把它折叠成:

    +--  3 lines: # A comment ----
    Manifest-Version: 1 
    

    问题是没有明显的'结束'字符,折叠语法也没有帮助;所以我做不到 syntax region commentBlock start="^#" end="^[^#]" . 大致来说,语法区域应该从第一个散列字符开始,然后沿着行继续,直到找到一个不以散列字符开头的行。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Matteo Riva    15 年前
    :set foldmethod=expr
    :set foldexpr=getline(v:lnum)[0]==\"#\"
    

    作为参考, :h fold-expr .

        2
  •  1
  •   Andy Stewart    15 年前

    syntax region commentBlock start="^#" end="^#\@!" ?

    这个 \@! (?!pattern) 在Perl中,即如果前面的原子-- #