Assume I have a syntax as exemplified below and that I want to create a syntax folding definition for the nested
begin : label a = 0; begin b = 1; end c = 2; begin d = 3; end end if (a) begin w = 0; end else begin if (b) begin y = 0; end else if (c) begin : another_label y = 1; end else begin y = 2; end end
At the moment I have the following syntax defined, which has the obvious issue with the highlight of the
end keyword and it also folds one line less when
end is at column 1.
syn region blockContainer \ start="\<begin\>" \ end="\<end\>" \ skip="/[*/].*" \ transparent \ keepend extend \ containedin=ALLBUT,Comment \ contains=block syn region block \ matchgroup=Statement \ start="\<begin\>" \ end="\<end\>"me=s-1 \ transparent \ fold \ contained containedin=blockContainer \ contains=TOP
Ideally I would also like a second set of regions where folding only occurs for
begin..end pairs where the
begin has a label (
I got to a point where I simply wasn't able to advance further with this syntax, so I started playing around with fold-expr. Unfortunately, the syntax is rather complex and the slowdown is quite noticeable when opening the files.
So, is any Vim syntax expert available to help me? :)