2014-02-24 17 views
2

當我使用#if 0,#else和#endif預處理器來註釋掉我的代碼時,vim正確地顯示了語法。但是,如果我使用這個序列#if 1,#else和#endif vim應該顯示#else和#endif之間的代碼爲註釋,但事實並非如此。我的vim版本是7.2.411。我在我的代碼中使用了很多地方,有時會因爲沒有突出顯示而感到困惑。有沒有辦法來實現這一點。謝謝您的幫助。#if 1的Vim語法問題

如:

#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

無法用vim 7.3重新生成。你嘗試過#if 42而不是#if 1嗎? – devnull

+0

我試過了。同樣的情況正在發生。還有一個更新,我使用的是CentOS 6.2 – sarath

+3

,在Vim 7.4中工作正常。也許你需要升級 – mihai

回答

3

也許你需要升級到VIM 7.3+,或至少更新您的語法文件C.我的$ VIMRUNTIME /語法/ c.vim的前幾行(對於VIM 7.3)是

" Vim syntax file 
" Language: C 
" Maintainer: Bram Moolenaar <[email protected]> 
" Last Change: 2012 May 03 
使用

的例子:help synID()下,我嘗試

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

並獲得 「cCppInElse2」。可能你會得到不同的東西。

覆蓋默認語法文件(或其他vim腳本)時的通常建議是將其放入您自己的vimfiles目錄中。當新文件是更新的標準發行版的一部分時,我會例外:I do希望在升級到某些未來版本的vim時將其替換。

+0

謝謝..在我的vim上面的命令返回「cInclude」。無論如何,我更新了我的vim到7.4。這裏很好,我得到了正確的語法高亮。從未認爲這是因爲舊版本;) – sarath

-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 

因爲 '#如果1' 將永遠是正確的。

+4

是的,我相信他們問爲什麼'#else'之後的部分在vim中沒有顯示爲「註釋掉」。 – Arkku

+1

@RahulKT:預處理器沒有問題。唯一的問題是vim沒有給我評論的語法。 – sarath