Действительно ли возможно свернуть препроцессор C в VIM. Например:
#if defined(DEBUG)
//some block of code
myfunction();
#endif
Я хочу свернуть его так, чтобы это стало:
+-- 4 lines: #if defined(DEBUG)---
Это нетривиально из-за ограничений механизма подсветки Vim: он не может очень хорошо выделять перекрывающиеся области. У вас есть два варианта, как мне кажется:
Использовать подсветку синтаксиса и много работать с опцией contains=
, пока это не сработает для вас (возможно, это будет зависеть от некоторых плагинов):
syn region cMyFold start="#if" end="#end" transparent fold contains=ALL
" ИЛИ
syn region cMyFold start="#if" end="#end" transparent fold contains=ALLBUT,cCppSkip
" ИЛИ что-то еще в этом духе
" Используйте синтаксическую складку
set foldmethod=syntax
Это, вероятно, потребует много возни, и вы можете никогда не добиться удовлетворительной работы. Поместите это в vimfiles/after/syntax/c.vim
или ~/.vim/after/syntax/c.vim
.
Используйте маркеры сгиба. Это сработает, но вы не сможете делать складки на скобках или на чем-либо еще, что вам может понравиться. Поместите это в ~/.vim/after/ftplugin/c.vim
(или эквивалентный путь vimfiles в Windows):
" Эта функция настраивает то, что будет отображаться на свернутой строке:
set foldtext=MyFoldText()
function! MyFoldText()
let line = getline(v:foldstart)
let linecount = v:foldend + 1 - v:foldstart
let plural = ""
if linecount != 1
let plural = "s"
endif
let foldtext = printf(" +%s %d line%s: %s", v:folddashes, linecount, plural, line)
return foldtext
endfunction
" Вот строка, которая творит волшебство
set foldmarker=#if,#endif
set foldmethod=marker