添加 vim 语法折叠标记

Nox*_*bru 5 syntax vim folding

我通常用 C 编写代码,我的 .vimrc 中也有set foldmethod=syntax,它工作得很好,因为它折叠了大括号和注释以及所有内容。

但有时我需要折叠大块代码,以免它们妨碍我(例如一组相关函数),我通常使用set foldmethod=marker和 标记>>>和 来完成此操作<<<

我一直在尝试添加一个新的同步区域,我最近得到的是:

syn region cFoldMarkers start='>>>' end='<<<' containedin=cComment transparent fold
Run Code Online (Sandbox Code Playgroud)

但这会造成混乱,因为它在某种程度上与评论相匹配。

有没有办法同时实现这两个目标?或者我应该放弃使用语法来执行此操作,而只为大括号、注释和我的自定义标记设置标记?

提前致谢

Nox*_*bru 1

好吧,在…大约 5 个小时尝试使用语法折叠来完成之后,我已经放弃并更改为表达式折叠。

遵循这个问题:LLVM-IR 语法折叠 for vim我创建了一个折叠函数,或多或少可以满足我的需求:

function! CFold()
    let this_line = getline(v:lnum)

    " Matching of braces
    if match(this_line, '}') >= 0
        return 's1'
    elseif match(this_line, '{$') >= 0
        return 'a1'
    " Matching of comments
    elseif match(this_line, '/\*') >= 0
        if match(this_line, '\*/$') == -1
            return 'a1'
        " Matching custom folding
        elseif match(this_line, '>>>') >= 0
            return 'a1'
        elseif match(this_line, '<<<') >= 0
            return 's1'
        endif
    elseif match(this_line, '\*/$') >= 0
        return 's1'
    endif
    return '='
endfunction

setlocal foldmethod=expr
setlocal foldexpr=CFold()
Run Code Online (Sandbox Code Playgroud)