2010-07-09 12 views
9

Tengo un archivo de texto con formato YAML y me gustaría definir plegado personalizado para VIM, pero no estoy seguro de cómo hacerlo (a pesar de leer la documentación de VIM para doblar). El archivo consta de "documentos" YAML, así:¿Cómo puedo doblar artículos YAML en VIM?

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

Me gustaría que el texto resultante plegada a ser algo como esto:

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

Se aprecia cualquier sugerencia! ¡Gracias!

Respuesta

4

Do

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

o

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

que agregará comentario con el título al principio de cada documento YAML y dejar el documento aún válido. La opción foldmarker no debe tocarse.

Resultado:

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

doblado:

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

doblado:

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

¡Gracias por la respuesta!No tenía claro cómo usar marcadores, y esto definitivamente resolvió el problema. Sin embargo, con el interés de no duplicar datos, ¿hay alguna manera de que VIM use la expresión regular que le dio para determinar automáticamente los niveles de plegado, con un título? – wkranec

+0

@wkranec Creo que se puede hacer usando 'foldmethod = expr' con el apropiado' foldexpr' y 'foldtext' establecido, pero nunca lo he usado. – ZyX

2

Si desea utilizar un foldmethod distinto de "manual" todo el tiempo, añadir esta línea a su archivo ~/.vimrc:
conjunto foldmethod = foldoption

yo recomendaría usar foldmethod = sangrar. Esto se doblará según cualquier sangría. Luego, si cambias tu entrada para incluir las sangrías donde quieres que sucedan los pliegues. Por ejemplo si cambia de entrada a

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

Será veces como usted la describe

+0

Disculpa por el último comentario. Soy nuevo en SO y no sabía que el código en línea no funcionaría (ya no puedo editar más por algún motivo). – wkranec

+0

Sí, fue por mi culpa, leí mal tu entrada original. Estaba pensando que ya tenía una relación anidada. Puede usar set foldmethod = marker en su lugar. Conjuntamente con eso puedes usar foldmarker = mmm, nnn donde mmm es el marcador inicial ynnn es el marcador final. Así que trataría de establecer foldmarker = ---, --- (asumiendo --- en YAML está OK marker/delimeter para pliegues). Espero que esto ayude. –

+0

Gracias de nuevo, Eric. He intentado con el método de marcador como lo describió anteriormente, pero luego VIM pliega todo el documento (o todos los elementos hasta el final del archivo si intenta hacer un doblez en el medio del documento (ya que realmente no hay un cierre) "---"). – wkranec

Cuestiones relacionadas