2010-07-09 18 views
9

मेरे पास एक वाईएएमएल स्वरूपित टेक्स्ट फ़ाइल है, और वीआईएम के लिए कस्टम फोल्डिंग को परिभाषित करना चाहूंगा, लेकिन मुझे यकीन नहीं है कि इसके बारे में कैसे जाना है (फोल्डिंग के लिए वीआईएम दस्तावेज पढ़ने के बावजूद)। फ़ाइल इसलिए की तरह, 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

वर्णित

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

करने के लिए अपने इनपुट बदल अगर यह गुना होगा क्या

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

या

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

कि शुरुआत करने के लिए शीर्षक के साथ टिप्पणी जोड़ देगा प्रत्येक वाईएएमएल दस्तावेज़ का और दस्तावेज़ अभी भी वैध छोड़ दें। 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

उत्तर के लिए धन्यवाद!मैं मार्करों का उपयोग करने के बारे में स्पष्ट नहीं था, और इससे निश्चित रूप से समस्या हल हो गई। हालांकि, डेटा डुप्लिकेट न करने के हित में, क्या वीआईएम के लिए एक शीर्षक के साथ स्वचालित रूप से फोल्ड स्तर निर्धारित करने के लिए दिए गए रेगेक्सप का उपयोग करने का कोई तरीका है? – wkranec

+0

@wkranec मुझे लगता है कि यह 'foldmethod = expr' का उपयोग उचित' foldexpr' और 'foldtext' सेट के साथ किया जा सकता है, लेकिन मैंने कभी इसका उपयोग नहीं किया है। – ZyX

2

आप से "मैन्युअल" हर समय अन्य एक foldmethod उपयोग करना चाहते हैं, इस लाइन आपके ~/.vimrc में जोड़ें:
सेट foldmethod = foldoption

मैं का उपयोग कर की सिफारिश करेंगे foldmethod = मांगपत्र। यह किसी भी इंडेंट के आधार पर गुना होगा। फिर यदि आप इंडेंट्स को शामिल करने के लिए अपना इनपुट बदलते हैं जहां आप फोल्ड करना चाहते हैं। उदाहरण के लिए आप के रूप में आप

+0

अंतिम टिप्पणी के बारे में क्षमा करें। मैं SO के लिए नया हूं और मुझे नहीं पता था कि इनलाइन कोड काम नहीं करेगा (मैं किसी कारण से और संपादित नहीं कर सकता)। – wkranec

+0

हाँ, यह मेरी गलती थी, मैंने आपके मूल इनपुट को गलत तरीके से पढ़ा। मैं सोच रहा था कि यह पहले से ही घोंसला वाला रिश्ता था। आप इसके बजाय set foldmethod = marker का उपयोग कर सकते हैं। इसके साथ आप सेट फ़ोल्डमार्कर = एमएमएम का उपयोग कर सकते हैं, एनएनएन जहां एमएमएम स्टार्ट मार्कर है और एनएनएन एंडिंग मार्कर है। तो मैं foldmarker = --- सेट करने की कोशिश करता हूं, --- (मानते हैं --- वाईएएमएल में फोल्ड के लिए ओके मार्कर/डिलीमीटर है)। उम्मीद है की यह मदद करेगा। –

+0

फिर से धन्यवाद, एरिक। मैंने वर्णन किए अनुसार मार्कर विधि को आजमाया है, लेकिन फिर VIM पूरे दस्तावेज़ को जोड़ता है (या फ़ाइल के अंत तक सभी आइटम जब आप दस्तावेज़ के बीच में एक गुना बनाने का प्रयास करते हैं (क्योंकि वास्तव में कोई बंद नहीं होता है "---") – wkranec

संबंधित मुद्दे

 संबंधित मुद्दे