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)
但这会造成混乱,因为它在某种程度上与评论相匹配。
有没有办法同时实现这两个目标?或者我应该放弃使用语法来执行此操作,而只为大括号、注释和我的自定义标记设置标记?
提前致谢
好吧,在…大约 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)