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

时间:2010-02-10 14:13:41

标签: vim syntax region fold

我正在编写一个用于编辑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 个答案:

答案 0 :(得分:2)

:set foldmethod=expr
:set foldexpr=getline(v:lnum)[0]==\"#\"

有关信息,请:h fold-expr

答案 1 :(得分:1)

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

\@!与Perl中的(?!pattern)类似,即如果前面的原子 - 在这种情况下为# - 在当前位置不匹配,则它与零宽度匹配。