2010-07-09 48 views
9

我有一個YAML格式的文本文件,並希望爲VIM定義自定義摺疊,但我不確定如何去做(儘管閱讀了VIM文檔進行摺疊)。該文件包含YAML「文件」,就像這樣:我如何在VIM中摺疊YAML項目?

--- 
title: My Title 
attr1: value1 
attr2: value2 
--- 
title: Next Item 
attr1: value3 
--- 
title: One More Item 
... 

我希望得到的摺疊文本看起來像這樣:

+---- 2 lines: My Title ---- 
+---- ? lines: Next Item --- 

任何建議都感激!謝謝!

回答

4

%s/---\(.*\)\(\_.\{-}title: \)\(.*\)/---\1 #{{{1 \3\2\3/g 
set foldmethod=marker 

%s/\(---\_.\{-}title: \)\(.*\)/#{{{1 \2\r\1\2/g 
set foldmethod=marker 

,將與標題添加註釋開始每個YAML文件和離開文件仍然有效。 foldmarker選項必須保持不變。

結果:

1.

--- #{{{1 My Title 
title: My Title 
attr1: value1 
attr2: value2 
--- #{{{1 Next Item 
title: Next Item 
attr1: value3 
--- #{{{1 One More Item 
title: One More Item 
... 

摺疊:

+-- 4 строк: --- My Title----------------------------- 
+-- 3 строк: --- Next Item---------------------------- 
+-- 3 строк: --- One More Item------------------------ 

2.

#{{{1 My Title 
--- 
title: My Title 
attr1: value1 
attr2: value2 
#{{{1 Next Item 
--- 
title: Next Item 
attr1: value3 
#{{{1 One More Item 
--- 
title: One More Item 
... 

摺疊:

+-- 5 строк: My Title-------------------------------- 
+-- 4 строк: Next Item------------------------------- 
+-- 4 строк: One More Item--------------------------- 
+0

感謝您的回答!我不清楚如何使用標記,這絕對解決了這個問題。然而,爲了不復制數據,VIM有沒有辦法讓你使用正則表達式來自動確定摺疊級別和標題? – wkranec 2010-07-09 19:59:40

+0

@wkranec我認爲這可以通過'foldmethod = expr'來完成,並設置了合適的foldexpr和foldtext,但我從來沒有使用它。 – ZyX 2010-07-10 07:50:01

2

如果您想使用 「手動」 的所有時間以外的使用foldmethod,這一行添加到您的〜/ .vimrc:
使用foldmethod = foldoption

我會建議使用使用foldmethod =縮進。這將基於任何縮進來摺疊。然後,如果您更改輸入以在想要摺疊的位置包含縮進量。例如,如果你改變你的輸入

--- 
title: My Title 
    other attrs: other values 
--- 
title: Next Item 
--- 
title: One More Item 
... 

這將摺疊像你描述

+0

對最近的評論抱歉。我是新手,不知道內聯代碼無法工作(由於某種原因,我無法編輯)。 – wkranec 2010-07-09 13:50:39

+0

是的,那是我的錯,我誤解了你的原始意見。我在想它已經有了一個嵌套的關係。您可以改用set foldmethod = marker。結合你可以使用set foldmarker = mmm,nnn其中mmm是開始標記,nnn是結束標記。所以我會嘗試設置foldmarker = ---,---(假設---在YAML中是摺疊的OK標記/分隔符)。希望這可以幫助。 – 2010-07-09 14:05:25

+0

再次感謝,埃裏克。我之前已經嘗試過標記方法,但是之後VIM會摺疊整個文檔(或者如果您試圖在文檔的中間進行摺疊,則會將所有項目摺疊到文檔的末尾(因爲實際上並沒有關閉「---」)。 – wkranec 2010-07-09 14:28:03