vim 根据标识符的值在适当的#ifdef块中显示代码

uinbv5nw  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(152)

我有一个C代码库,源文件中到处都是#ifdef块。有多个标识符和对应的ifdef(ifdef嵌套到多个级别)。在查看vim中的代码时,是否有一种方法可以定义多个标识符并查看/突出显示我的代码,这样我就只能看到定义标识符时适用的ifdef块。

#if defined(ID1) && (ID1 == 1)
// code 1
#elif defined(ID1) && (ID1 == 2)
// code 2

字符串
当设置ID=1时,我的视图应该只显示/突出显示code 1,当ID=2时,我的视图应该只显示/突出显示code 2,否则如果没有定义IDcode 1code 2都不应该突出显示或显示。

oknrviil

oknrviil1#

DISCLAIMER

This is generally a bad idea. You never want to hide text in a source file. 
Compiling different code branches based on flags set at compile time is a 
different story. But viewing the code, you should always see what you ask 
the compiler to build

字符串
也就是说,如果您想在阅读时隐藏代码,有几种方法可以实现
1.折叠:详见:help fold
1.提示junegunn/limelight.vim是一个很好的工具,可以选择性地关闭光标所在区域以外的代码空间的语法高亮显示。

bvjxkvbb

bvjxkvbb2#

这里有一个折叠C++的稍微实用的解决方案。
首先设置通用ifdef折叠。这应该捕获#if#ifdef#ifndef

function! FoldtextForC()
    " Show the whole #if line
    return getline(v:foldstart)
endfun
set foldtext=FoldtextForC()
set foldmarker=#if,#endif

字符串
然后你可以这样做来关闭所有的DEBUG折叠:

:g/#ifdef DEBUG/foldclose


运行该命令后,此代码示例将如下所示(set foldcolumn=3,因此您可以看到折叠):


的数据
你可能想写一些更聪明的东西来做:foldopen!,收集所有的定义,分为定义的和未定义的,构建适当的正则表达式,并使用改进的正则表达式执行上述命令。
另一种方法是写一个'foldexpr',它做类似的事情,但只折叠没有编译的块。然后你总是可以用:foldclose!来隐藏所有没有编译的块,用:foldopen!来再次查看所有的块。

相关问题