VIM'de C önişlemcisini katlamak mümkün müdür. Örneğin:Fold C Önişlemci VIM'de
#if defined(DEBUG)
//some block of code
myfunction();
#endif
Ben hale gelecek şekilde katlayın istiyorum:
+-- 4 lines: #if defined(DEBUG)---
VIM'de C önişlemcisini katlamak mümkün müdür. Örneğin:Fold C Önişlemci VIM'de
#if defined(DEBUG)
//some block of code
myfunction();
#endif
Ben hale gelecek şekilde katlayın istiyorum:
+-- 4 lines: #if defined(DEBUG)---
Bunun nedeni Vim'ın vurgulayarak motorun sınırlamalara olmayan Önemsiz: çok iyi çakışan bölge vurgulamak olamaz.
syn region cMyFold start="#if" end="#end" transparent fold contains=ALL
" OR
syn region cMyFold start="#if" end="#end" transparent fold contains=ALLBUT,cCppSkip
" OR something else along those lines
" Use syntax folding
set foldmethod=syntax
Bu muhtemelen olacak: contains=
seçeneğiyle ilgili
Kullanım dizim ve kadara (muhtemelen bazı eklentileri bağlıdır) sizin için çalışan sonu: gördüğüm kadarıyla İki seçeneğiniz vardır Çok fazla uğraşmak zorunda kalmazsınız ve asla tatmin edici bir şekilde çalışmazsınız. Bunu vimfiles/after/syntax/c.vim
veya ~/.vim/after/syntax/c.vim
'a koyun.
Katlama işaretçileri kullanın. Bu işe yarayacak, ancak parantez ya da hoşunuza gidebilecek başka herhangi bir şey üzerinde katlanamazsınız. ~/.vim/after/ftplugin/c.vim
koy (veya Windows üzerinde eşdeğer vimfiles yolu): Benim c.vim sözdizimi dosyasına aşağıdaki satırları ekleyerek benim sevme için çalışan almak mümkün oldum
" This function customises what is displayed on the folded line:
set foldtext=MyFoldText()
function! MyFoldText()
let line = getline(v:foldstart)
let linecount = v:foldend + 1 - v:foldstart
let plural = ""
if linecount != 1
let plural = "s"
endif
let foldtext = printf(" +%s %d line%s: %s", v:folddashes, linecount, plural, line)
return foldtext
endfunction
" This is the line that works the magic
set foldmarker=#if,#endif
set foldmethod=marker
:
syn match cPreConditMatch display "^\s*\zs\(%:\|#\)\s*\(else\|endif\)\>"
+syn region cCppIfAnyWrapper start="^\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\s\+.*\s*\($\|//\|/\*\|&\)" end="^\s*\(%:\|#\)\s*endif\>" contains=TOP,cCppInIfAny,cCppInElseAny fold
+syn region cCppInIfAny start="^\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\s\+.*\s*\($\|//\|/\*\|&\)" end="^\s*\(%:\|#\)\s*\(else\s*\|elif\s\+\|endif\)\>"me=s-1 containedin=cCppIfAnyWrapper contains=TOP
+syn region cCppInElseAny start="^\s*\(%:\|#\)\s*\(else\|elif\)" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 containedin=cCppIfAnyWrapper contains=TOP
if !exists("c_no_if0")