#if 1的Vim语法问题

时间:2014-02-24 12:22:42

标签: c vim

当我使用#if 0,#else和#endif预处理器注释掉我的代码时,vim正在显示语法。但是,如果我使用像#if 1这样的序列,#else和#endif vim应该在#else和#endif之间显示代码作为注释,但事实并非如此。我的vim版本是7.2.411。我在我的代码中很多地方都使用这些,有时会因为没有突出显示而感到困惑。有没有办法实现这一点。谢谢你的帮助。

例如:

#include <stdio.h>

int main()
{
#if 1
    printf("inside #if 1\n");
#else
    printf("inside #else\n"); // <-- This part should appear in commented syntax
#endif
    return 0;
}

2 个答案:

答案 0 :(得分:3)

可能你需要升级到vim 7.3+,或至少更新你的C语法文件。我的$ VIMRUNTIME / syntax / c.vim的前几行(对于vim 7.3)是

" Vim syntax file
" Language: C
" Maintainer:   Bram Moolenaar <Bram@vim.org>
" Last Change:  2012 May 03

使用:help synID()下的示例,我尝试了

:echo synIDattr(synID(line("."), col("."), 1), "name")

并获取“cCppInElse2”。可能你会得到不同的东西。

覆盖默认语法文件(或其他vim脚本)时的通常建议是将其放在您自己的vimfiles目录中。当新文件是更新的标准发行版的一部分时,我做了一个例外:当我升级到vim的某个未来版本时,我希望它被替换。

答案 1 :(得分:-2)

如果您正在使用

#if 1
printf("inside #if 1\n");   //This will work always and this is same as if(1){statement;}
#else
printf("inside #else\n");  //This part will never come

因为'#if 1'将永远为真。