2011-05-13 49 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