当我使用#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;
}
答案 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'将永远为真。