我正在编写一个用于编辑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="^[^#]"
。粗略地说,语法区域应该从第一个哈希字符开始,然后继续向下行,直到找到一个不以哈希开头的行。
答案 0 :(得分:2)
:set foldmethod=expr
:set foldexpr=getline(v:lnum)[0]==\"#\"
有关信息,请:h fold-expr
。
答案 1 :(得分:1)
syntax region commentBlock start="^#" end="^#\@!"
怎么样?
\@!
与Perl中的(?!pattern)
类似,即如果前面的原子 - 在这种情况下为#
- 在当前位置不匹配,则它与零宽度匹配。