~/.vimrc
この行をC マクロを折り畳むために追加し#if
ます ... #endif
:
au FileType h,c,cpp syn region zhouzmFoldIf start="^\s*#if" end="^\s*#endif" fold transparent extend
ほとんどの場合、うまく機能します。しかし{
、間に隙間があると正しく折りたためません。どうすればこの問題を解決できますか?
~/.vimrc
この行をC マクロを折り畳むために追加し#if
ます ... #endif
:
au FileType h,c,cpp syn region zhouzmFoldIf start="^\s*#if" end="^\s*#endif" fold transparent extend
ほとんどの場合、うまく機能します。しかし{
、間に隙間があると正しく折りたためません。どうすればこの問題を解決できますか?
この vim_use スレッドでは、問題が議論されています。Ben Fritz が次のソリューションを投稿しました。
" fold #if...#else...#endif constructs
syn region IfFoldContainer
\ start="^\s*#\s*if\(n\?def\)\?\>"
\ end="#\s*endif\>"
\ skip=+"\%(\\"\|[^"]\)\{-}\\\@<!"\|'[^']\{-}'\|'\\''\|//.*+
\ transparent
\ keepend extend
\ containedin=NONE
\ contains=SynFoldIf,SynFoldElif,SynFoldElse
syn region SynFoldIf
\ start="^\s*#\s*if\(n\?def\)\?\>"
\ end="^\s*#\s*el\(se\|if\)\>"ms=s-1,me=s-1
\ skip=+"\%(\\"\|[^"]\)\{-}\\\@<!"\|'[^']\{-}'\|'\\''\|//.*+
\ fold transparent
\ keepend
\ contained
\ nextgroup=SynFoldElif,SynFoldElse
\ contains=TOP
syn region SynFoldElif
\ start="^\s*#\s*elif\>"
\ end="^\s*#\s*el\(se\|if\)\>"ms=s-1,me=s-1
\ skip=+"\%(\\"\|[^"]\)\{-}\\\@<!"\|'[^']\{-}'\|'\\''\|//.*+
\ fold transparent
\ keepend
\ contained
\ nextgroup=SynFoldElse
\ contains=TOP
syn region SynFoldElse
\ start="^\s*#\s*else\>"
\ end="^\s*#\s*endif\>"
\ skip=+"\%(\\"\|[^"]\)\{-}\\\@<!"\|'[^']\{-}'\|'\\''\|//.*+
\ fold transparent
\ keepend
\ contained
\ contains=TOP