如何在vim中使用类似c的程序

如何在vim中使用类似c的程序,vim,fold,folding,Vim,Fold,Folding,我最近开始使用vim的折叠功能。不幸的是,在我这样声明函数的情况下,它不是很有用: /** * 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 s

我最近开始使用vim的折叠功能。不幸的是,在我这样声明函数的情况下,它不是很有用:

/**
 * 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();
}
不是这样的:

+-- 10 lines: A function that do something.
+-- 42 lines: Another function.
+-- 7 lines: *
int i_do_something(int a, int b) {
   something();
}
我试着使用marker方法,但没有达到我预期的效果


如何在类似C的程序中正确使用vim的折叠?

您可以通过
'foldtext'
选项影响闭合折叠中显示的内容。也许已经有人写过这样的书了;否则,您必须编写一个Vim函数,该函数还考虑下一行(折叠),并提取您想要查看的文本。

这里有一个自定义的折叠函数,可以根据您的要求进行折叠。复制到.vimrc并享受!:)

使用此功能,以/**开头的注释上的折叠文本将在注释的第二行显示文本,缩进和*已删除。您将得到这样的结果:
(5行)描述。
常规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

它起作用了。将要公开的信息放在折叠的第一行。这是您的第一行注释是
/*一个做某事的函数。
。marker方法以什么方式不能像您期望的那样工作?