Vim coffescript自定义折叠

Vim coffescript自定义折叠,vim,macvim,Vim,Macvim,对于“标准”JavaScript,我有一个我非常喜欢的自定义折叠功能: function! JavaScriptFold() setl foldmethod=syntax setl foldlevelstart=1 set fillchars=fold:\ syn region foldBraces start=/{/ end=/}/ transparent fold keepend extend function! FoldText()

对于“标准”JavaScript,我有一个我非常喜欢的自定义折叠功能:

function! JavaScriptFold()
    setl foldmethod=syntax
    setl foldlevelstart=1
    set fillchars=fold:\ 
    syn region foldBraces start=/{/ end=/}/ transparent fold keepend extend

    function! FoldText()
        return substitute(getline(v:foldstart), '{.*', '{...}', '')
    endfunction
    setl foldtext=FoldText()
endfunction
一个善良的灵魂能给我看一个咖啡剧本的翻译吗? 所以

会像这样折叠成第一行

testFunction = (x) ->
折叠文字对象也有好处,但函数已经很好了


PS:当然,我使用的是Vim的coffee脚本插件,因为我不知道coffee,也不知道它支持什么文字对象,对此我无能为力。但是,可以通过此设置(可以转换为模型线)实现所需的功能:


你没有指定在折叠上显示什么,所以我忽略了这个。您可以使用foldtext设置来实现此目的。请参见
:h fold foldtext

嗨,克里斯蒂安,非常感谢你的回答。它工作得很好,但有一个问题:当多个函数(->)嵌套在一个外部函数中时,内部函数会折叠它们的内容,但它们本身不会被外部函数折叠(隐藏)?我认为这应该可以工作:
:setl fdm=expr fde=getline(v:lnum)=~'->$'&&indent(v:lnum)完美!非常感谢Christian,真的很感激Christian,你能解释一下它是怎么工作的吗?谢谢如果我没记错的话,这意味着所有以“->”结尾的行都会从级别1开始折叠,所有只包含空格的行都不会折叠,所有其他行都会从上一行继承折叠级别。
testFunction = (x) ->
:setl fdm=expr fde=getline(v:lnum)=~'->$'?'>1':getline(v:lnum)=~'^\\s*$'?0:'='