Hi François!

On Mo, 05 Sep 2011, François Ingelrest wrote:

> Hi all,
> 
> The following code is highlighted incorrectly when using the cpp filetype:
> 
> #if defined FOO
> #elif defined BAR
> #endif
> 
> The part "defined BAR" is not highlighted, while "defined FOO" is.
> AFAICT, my runtime files are up to date.
> 
> I don't know much about Vim syntax files, so I can't tell where
> exactly is the problem.

Hm, I think, the syn match takes precedence over the defined region 
there. If one makes the regular expression for the syn-match tighter, it 
should work. Something like this seems to work:

chrisbra@R500 ~/local/share/vim/vim73/syntax % diff -u c.vim{,.new}
--- c.vim       2011-09-05 10:23:24.074758311 +0200
+++ c.vim.new   2011-09-05 10:23:21.584754659 +0200
@@ -273,7 +273,7 @@
 
 " Accept %: for # (C99)
 syn region     cPreCondit      
start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" 
keepend 
contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
-syn match      cPreConditMatch display 
"^\s*\(%:\|#\)\s*\(else\|endif\|elif\)\>"
+syn match      cPreConditMatch display 
"^\s*\(%:\|#\)\s*\(else\|endif\|elif\)\>$"
 if !exists("c_no_if0")
   syn cluster  cCppOutInGroup  
contains=cCppInIf,cCppInElse,cCppInElse2,cCppOutIf,cCppOutIf2,cCppOutElse,cCppInSkip,cCppOutSkip
   syn region   cCppOutWrapper  
start="^\s*\(%:\|#\)\s*if\s\+0\+\s*\($\|//\|/\*\|&\)" end=".\@=\|$" 
contains=cCppOutIf,cCppOutElse fold

But Bram knows best, whether this is right.

regards,
Christian

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui