2011-05-13 64 views
3

当您展开代码的嵌套级别时,嵌套代码中的折叠文本不会缩进。它从+开始,而不是开始缩进。
缩进折叠文本

你知道如何改变它吗?

illustrating picture

+0

再来一次?我会试着弄清楚你的意思,但是看起来太过于神秘了 – sehe 2011-05-13 13:13:15

+0

我认为他的意思是Vim的默认foldtext没有缩进,他希望它的缩进与其内容相同。但我不会发誓。 – 2011-05-13 13:24:51

回答

6

如果你想让折叠文本在折叠的第一行相同的水平缩进,你需要在缩进级别的折叠文本:

function! MyFoldText() 
    let indent_level = indent(v:foldstart) 
    let indent = repeat(' ',indent_level) 
    ... 
    ... 
    return indent . txt 
endfunction 

在这里,我假设字符串txt是现有的折叠文本,因此,所有你需要做的就是将它添加到indent结束。

但我不确定这是否是您想要实现的。

编辑:

现在,我已经看到你的照片,我不知道这是否是你想要的。在追加到+之前,您可以尝试剥离主要空格。所以你想要的foldtext就像indent . '+' . txt

也许吧。

+0

是的,那是我想要的。只从您的摘录中删除getline。 – xralf 2011-05-13 15:12:51

+0

谢谢,我现在删除了getline。 – 2011-05-13 15:17:12

+2

对于其他人来说,'foldtext()'是返回默认foldtext的函数。所以'return indent.foldtext()'将返回默认的使用但缩进的foldtext。此外,您需要在某处使用'let foldtext = MyFoldText()'来使用此自定义函数。 – 2011-08-04 14:10:46

1

啊哈

你可能想在你的.vimrc注释掉此功能:

set foldtext=MyFoldText() 
set fillchars=fold:_ 

这是什么使你的文字折出现非默认情况下,通过使用功能:

function! MyFoldText() 
    " setting fold text 
    let nl = v:foldend - v:foldstart + 1 
    let comment = substitute(getline(v:foldstart),"^ *\" *","",1) 
    let linetext = substitute(getline(v:foldstart+1),"^ *","",1) 
    let txt = '+ ' . comment . ': ' . nl . ' ' . v:foldstart . '                                         ' 
    return txt 
endfunction 

碰巧,我非常喜欢那个功能,但当然还有de gustibus ...

+0

我很高兴你喜欢它。这个功能建议我从这个论坛(在另一个问题)一些古鲁。顺便说一句。那意味着“de gustibus”? – xralf 2011-05-13 15:14:22

+0

... non est disputandum([google it](http://www.google.com/search?q=non+est+disputandum)) – sehe 2011-05-13 20:50:57

+0

好谚语:-)我不知道重复命令:-) – xralf 2011-05-14 06:38:20