2010-07-09 21 views
9

YAML biçimlendirilmiş bir metin dosyam var ve VIM için özel katlamayı tanımlamak istiyorum, ancak bunun nasıl yapılacağından emin değilim (katlanmak için VIM belgelerine rağmen). dosya şöyle, YAML "Belgelerin" oluşur: Böyle bir şey aramaya çıkan katlanmış metni istiyoruzVIM'de YAML öğelerini nasıl katlayabilirim?

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

:

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

Herhangi önerileri takdir edilmektedir! Teşekkürler! "Manuel" tüm zamanların dışında bir foldmethod kullanmak istiyorsanız

cevap

4

açıklandığı gibi Örneğin siz Do It kat edeceği

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

için giriş değiştirirseniz başlangıcına başlığı ile yorum eklemek olacaktır

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

veya

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

Her YAML belgesinin ve izin belgesinin geçerliliği hala geçerli. foldmarker seçeneği el değmeden bırakılmalıdır.

Sonuç: Katlanmış

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 
... 

: Katlanmış

+-- 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

Cevabınız için teşekkürler!İşaretleyicileri nasıl kullanacağım konusunda net değildim ve bu kesinlikle sorunu çözdü. Bununla birlikte, verileri çoğaltmak istemezseniz, VIM'in katlama düzeylerini otomatik olarak belirlemek için verdiğiniz regexp'i kullanmanın bir yolu var mıdır? – wkranec

+0

@wkranec Uygun 'foldexpr' ve' foldtext' ayarlı 'foldmethod = expr' kullanılarak yapılabilir, ancak hiç kullanmadım. – ZyX

2

, sizin ~/.vimrc bu satırı ekleyin: Kullandığım öneriyoruz foldmethod = foldoption


seti foldmethod = girinti. Bu herhangi bir girintiye göre katlanacak. Daha sonra, girdinizi kıvrımların olmasını istediğiniz girintileri içerecek şekilde değiştirirseniz. Eğer

+0

Son yorum için üzgünüz. SO için yeniyim ve inline kodun işe yaramayacağını bilemedim (herhangi bir nedenden dolayı artık düzenleme yapıyorum). – wkranec

+0

Evet, bu benim hatamdı, orijinal girişinizi yanlış okuyorum. İç içe geçmiş bir ilişki olduğunu düşünüyorum. Bunun yerine set foldmethod = işaretini kullanabilirsiniz. Bununla birlikte, set foldmarker = mmm, nnn'yi kullanabilirsiniz, burada mmm başlangıç ​​işaretleyicidir ve nnn, bitiş işaretidir. Bu yüzden foldmarker = ---, --- ayarlamayı deneyebilirim (--- YAML içinde varsayımlar, katlar için bir işaretleyici/sınırlayıcıdır). Bu yardımcı olur umarım. –

+0

Tekrar teşekkürler, Eric. Belirttiğiniz gibi, daha önce işaret yöntemini denedim, ancak VIM belgenin ortasında bir kat yapmaya çalıştığınızda tüm belgeyi (veya dosyanın sonuna kadar tüm öğeleri katlıyor (çünkü gerçekten bir kapanış yok) "---"). – wkranec