自动折叠#在Vim中定义
我使用了大量的多平台C / C ++代码,并用通用的#define(#if WIN,#if UNIX等)分隔。如果我可以让vim在打开文件时自动折叠我当前不感兴趣的部分,那将是很好的。我搜索了vim脚本档案,但没有发现任何有用的信息。有什么建议?开始的地方?
解决方案
只需在语法中添加折叠区域
http://vim.wikia.com/wiki/Syntax_folding_of_Vim_scripts#Syntax_definitions
:syn region myFold start="\#IF" end="\#ENDIF" transparent fold :syn sync fromstart :set foldmethod=syntax
要添加到@hometoasts答案,我们可以将该命令作为注释添加到文件的前十行或者后十行,并且vim会自动将其用于该文件。
/* vim: syn region regionName start="regex" end="regex": */
Denton新增内容的快速补充:要对任何C或者C ++代码使用新的语法规则,请将其添加到$ VIMRUNTIME / syntax / c.vim和cpp.vim中的文件中。 ($ VIMRUNTIME是我们本地Vim代码所在的位置:在Unix上为〜/ .vim。)另外,语法定义中的start和end的值是正则表达式,因此可以使用^# if
和^#endif
以确保它们仅与行首的那些字符串匹配。
我一直使用forldmethod = marker并在注释中定义自己的折叠标签。
这是为了定义定义打开和关闭折叠的字符。在这种情况下,open是" <(",close是")>",将它们替换为我们想要的任何内容。
set foldmethod=marker set foldmarker=<(,)>
这是我的自定义函数,用于决定要显示折叠文本的内容:
set foldtext=GetCustomFoldText() function GetCustomFoldText() let preline = substitute(getline(v:foldstart),'<(','<(+)','') let line = substitute(preline,"\t",' ','g') let nextLnNum = v:foldstart + 1 let nextline = getline(nextLnNum) let foldTtl = v:foldend - v:foldstart return line . ' | ' . nextline . ' (' . foldTtl . ' lines)>' endfunction
希望能有所帮助。
我有一个庞大的代码库,因此有大量的#define。每个文件都有大量的#ifdef
而且大多数情况下它们是嵌套的。我尝试了许多vim脚本,但它们总是
过去我的代码遇到了一些错误。所以最后我把所有的定义都放进去了
头文件,并将其包含在我要使用的文件中,并对其进行了gcc处理
像这样
gcc -E -C -P source.cpp> output.cpp
-E命令使gcc仅在文件上运行预处理器,因此所有不需要的
未定义的#ifdef中的代码将被删除。
-C选项将注释保留在文件中。
-P选项禁止在预处理器的输出中生成行标记。