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