自动翻译#ifdef ..#endif in vim via .vimrc

时间:2011-06-29 14:41:13

标签: vim folding

我在互联网上看到了部分解决方案,但没有一个真正让我感到满意:我必须把什么放入我的.vimrc(理想情况下我不想冒任何语法/ * .vim文件)。我打开的c / cpp / h文件,我自动折叠了#ifdef ... #endif个部分?

2 个答案:

答案 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放弃。

也许你可以围绕这个概念设计一个小脚本。我不太确定是否会与常规语法折叠进行(不利)交互,因为我不习惯使用它。我通常使用缩进折叠和手动折叠操作。