2012-10-29 27 views
14

Khi viết mã C, tôi sử dụng hỗn hợp GNUK&R kiểu. Điều này có nghĩa là giá trị trả về, mỗi tham số và dấu ngoặc nhọn mở của một hàm nằm trên một dòng riêng của nó. Tôi cũng muốn sử dụng tính năng gấp Vim nhưng với foldmethod=syntax, gấp trông như thế này:Làm thế nào tôi có thể gấp các hàm kiểu GNU C trong Vim chính xác?

bad-folding

Có thể thấy tên hàm trong phần tóm tắt lần mà không cần bất kỳ dấu lần đặc biệt hoặc foldexpr s?

+0

http://stackoverflow.com/questions/762310/how-can-i-automatically-fold-a-long-c-code-in-vim –

+0

@matthias tìm cho bạn một số giải pháp để gấp chính xác trong C? – JuanPablo

+0

Không may là không. Và do đó tôi không gấp mã C trừ thủ công :-( – matthias

Trả lời

1

Hãy thử điều này như là một điểm khởi đầu (Tôi có nó trong vimrc của tôi, nhưng tôi thấy nó trực tuyến):

" Folding { 
function! CssFoldText() 
    let line = getline(v:foldstart) 
    let nnum = nextnonblank(v:foldstart + 1) 
    while nnum < v:foldend+1 
     let line = line . " " . substitute(getline(nnum), "^ *", "", "g") 
     let nnum = nnum + 1 
    endwhile 
    return line 
endfunction 

setlocal foldtext=CssFoldText() 
setlocal foldmethod=marker 
setlocal foldmarker={,} 
setlocal fillchars=fold:/ 
setlocal foldlevel=-1 
" highlight Folded term=underline cterm=bold gui=bold guifg=Blue guibg=Black 
" highlight FoldColumn term=underline cterm=bold gui=bold guifg=Blue guibg=Black 
"} 
2

Something mà có thể là một sự thỏa hiệp tốt - nếu bạn sử dụng indent lần - là để thiết lập Tham số foldminlines đến số cao hơn.

:set foldmethod=indent 
:set foldminlines=5 

Nếu hầu hết các chức năng của bạn dài, nó sẽ chỉ ảnh hưởng đến danh sách tham số của bạn. Nhược điểm rõ ràng là, rằng nó sẽ tự động mở ra các chức năng nhỏ cũng nhỏ hơn 5 dòng dài.

Các vấn đề liên quan