Моя цель состоит в том, чтобы расширить foldmethod=syntax
с помощью моего собственного пользовательского правила.
Мой подход заключается в том, чтобы использовать foldmethod=expr
и определить это правило в моем foldexpr
(например,добавить сгиб для комментариев «///»).После этого ресурсы, которые я обнаружил, обычно возвращаются к чему-то похожему на складывание отступов.Так есть ли хороший способ вернуться к свертыванию синтаксиса после пользовательских правил, не воспроизводя полную грамматику для того языка, который я использую?
Пока я пытаюсь это сделать, что не очень удовлетворительное приближениесвертывание синтаксиса:
function! GetFold(lnum)
let this_line=getline(a:lnum)
let pprev_i=indent(a:lnum - 2)/&shiftwidth
let prev_i=indent(a:lnum - 1)/&shiftwidth
let this_i=indent(a:lnum)/&shiftwidth
" comments
if this_line =~? '^\s*\/\/\/.*'
return this_i + 1
endif
" like indent folding, but includes the closing bracket line to the fold
if empty(this_line)
if prev_i < pprev_i
return prev_i
endif
return -1
endif
if this_i < prev_i
return prev_i
endif
return this_i
endfunction