我在互联网上看到了部分解决方案,但没有一个真正让我感到满意:我必须把什么放入我的.vimrc(理想情况下我不想冒任何语法/*.vim文件)这样所有.c/cpp我打开的/ h文件,我自动折叠#ifdef ... #endif部分?
如果您想要的唯一折叠类型是#ifdef部分,最简单的方法是使用以下内容创建文件~/.vim/after/ftplugin/c.vim(您可能还需要执行此操作cpp.vim,我不确定):
set foldmarker=#ifdef,#endif
set foldmethod=marker
Run Code Online (Sandbox Code Playgroud)
如果你真的想把它放在.vimrc而不是使用~/.vim/after/结构,你可以这样做:
autocmd FileType *.[ch]{,pp} call FoldPreprocessor()
function! FoldPreprocessor()
set foldmarker=#ifdef,#endif
set foldmethod=marker
endfunction
Run Code Online (Sandbox Code Playgroud)
您可能还想考虑使用:
set foldmarker=#if,#endif
Run Code Online (Sandbox Code Playgroud)
因为这将赶上#if defined(...),#ifdef,#ifndef,#if 0等以及#ifdef.
使用语法折叠执行此操作更具挑战性,因为您必须更改语法规范,因为它不支持此标准.
您知道可以使用%密钥导航预处理器条件块吗?
此外,[#和]#导航向上/向下.
所以你可以去条件块的开头(也许是/^#Enter),然后
zf% -- fold to next conditional directive
v2]#zf -- fold to second next directive (e.g. #else... #endif)
Run Code Online (Sandbox Code Playgroud)
zd 放弃折叠.
也许你可以围绕这个概念设计一个小脚本.我不太确定是否会与常规语法折叠进行(不利)交互,因为我不习惯使用它.我通常使用缩进折叠和这样的手动折叠操作.