I have seen partial solutions over the internet but none that really satisfied me: what do I have to put into my .vimrc (ideally I don't want to chance any syntax/*.vim file) such that in all .c/cpp/h files that I open, I get automatic folding of #ifdef ... #endif
sections?
If the only type of folding that you want is the #ifdef
sections, the easiest way is to create a file ~/.vim/after/ftplugin/c.vim
(you may also need to do this in cpp.vim
, I'm not sure) with the following content:
set foldmarker=#ifdef,#endif
set foldmethod=marker
If you really want to put it in .vimrc
rather than using the ~/.vim/after/
structure, you can do something like this:
autocmd FileType *.[ch]{,pp} call FoldPreprocessor()
function! FoldPreprocessor()
set foldmarker=#ifdef,#endif
set foldmethod=marker
endfunction
You might also want to consider using:
set foldmarker=#if,#endif
As that will catch #if defined(...)
, #ifdef
, #ifndef
, #if 0
etc as well as #ifdef
.
Doing this with syntax folding is more challenging as you'll have to change the syntax specification as it doesn't support this as standard.