2014-10-03 78 views
0

我最近開始使用vim進行摺疊。遺憾的是沒有的情況下非常有用,我宣佈我的功能是這樣的:如何在vim中使用類似於c程序的摺疊

/** 
* A function that do something. 
* @param a A 
* @param b B 
* @return Something 
* 
**/ 
int i_do_something(int a, int b) { 
    something(); 
} 

在我的夢想,我想我的褶皺是這樣的:

+-- 10 lines: A function that do something. 
+-- 42 lines: Another function. 

而且不會是這樣的:

+-- 7 lines: * 
int i_do_something(int a, int b) { 
    something(); 
} 

我試圖使用標記方法,但它不工作我的預期。

如何在C程序中正確使用vim的摺疊?

+0

它完成這項工作。把你想要公開的信息放在摺疊的第一行。這是你的第一行評論是'/ *一個可以做某事的函數。 – HuStmpHrrr 2014-10-03 14:21:17

+0

標記方法以何種方式不能按預期工作? – ohlec 2014-10-03 16:20:15

回答

1

您可以通過'foldtext'選項影響關閉摺疊中顯示的內容。也許有人已經寫了這樣的;否則,你必須編寫一個Vim函數,它也考慮下一行(摺疊)的行,並提取你想查看的文本。

0

這是一個自定義摺疊功能,可以按照您的要求摺疊。複製到.vimrc並享受! :)

使用此功能,在以/ **開頭的註釋上摺疊文本將在縮進和*刪除註釋的第二行顯示文本。您最終會得到類似於:(5 lines) Description. 常規C風格/ *註釋具有類似的顯示,但帶有第一行文本。所有其他摺疊仍然會照常顯示全部第一行。

set foldtext=FoldText() 

function FoldText() 
    let text="" 
    let region = synIDattr(synID(a:line, a:column, 1),"name") 

    let text = "(" . (v:foldend - v:foldstart) . ' lines) ' 

    if region == 'cCommentStart' && 
    \ match(getline(v:foldstart), "/*\\*\\*") != -1 
     let text = text . substitute(getline(v:foldstart + 1), '^\s* \*', '', '') 
    elseif region == 'cCommentStart' && 
    \ match(getline(v:foldstart), "/*\\*\\*") == -1 
     let text = text . substitute(getline(v:foldstart), '/\*', '', '') 
    else 
     let text = text . getline(v:foldstart) 
    endif 

    return text 
endfunction