lunes, mayo 08, 2017

vim: Reformateando XML / JSON

Supongamos que tenemos JSON o un fichero XML que no esta bien formateado. Por ejemplo

<article>
<blog src="https://icewinddale.blogspot.com"></blog>
<author>Drizzt
    </author>
    </article>

vim permite pasar el texto del buffer actual a través de un filtro y substituir el contenido del buffer actual por la salida del filtro. Para el caso de XML se puede usar xmllint. La siguiente orden de vim pasará todo el contenido del buffer a la entrada estándar de xmllint que lo formateará y su salida substituirá el contenido del buffer.

%!xmllint --format -

Hay que tener en cuenta que en caso de error, el texto que tengamos en el buffer será el mensaje de error de la utilidad.

Esto mismo se puede hacer también con JSON si se usa la utilidad jq:

%!jq .

La orden que se está usando para ejecutar y filtrar los datos es más genérica. Especificamos un rango - donde % significa el fichero completo -, y la orden que se quiere ejecutar tras !. Esto da la flexibilidad necesaria, por ejemplo, para sólo formatear el json entre las líneas 3 y 4 de este texto:

Linea 1
Linea 2
{"key1": "value1", 
        "key2": "value"}
Linea 5 

Se usa la siguinte orden:

:3,4!jq .

El resultado de ejecutar dicha orden será:

Linea 1
Linea 2
{
  "key1": "value1",
  "key2": "value"
}
Linea 5 

No hay comentarios: