2012-07-25 8 views
11

Tengo un archivo XML con formato correcto, y siguiendo el orden dada como una respuesta aquí:Vim formatear usando gg = G con xml

How can I autoformat/indent C code in vim?

estoy tratando de guión automático mi archivo para mostrar anidación correcta .

Antes traté de usar este comando fijo el tipo de archivo a XML utilizando :set ft=xml que el archivo Empecé con tiene una extensión de .mm, y también :set nowrap.

Aquí está mi archivo ~/.vimrc:

syntax on 
set history=1000 
set smartindent 
set tabstop=2 
set shiftwidth=2 
set expandtab 

¿Por qué cuando expido gg=G, aparece un mensaje que dice 54 lines indented, sin embargo, mi archivo sigue siendo un-anidado?

+1

No es una respuesta directa, pero ¿has probado [xmllint] (http://xmlsoft.org/xmllint.html) --format? – ephemient

+0

No, no lo he hecho, realmente no tengo una necesidad inherente de tener el archivo formateado en este momento. Realmente estoy buscando la razón por la cual este comando no está haciendo lo que esperaba en vim. Gracias por la sugerencia, sin embargo. – grimetime

Respuesta

19

en caso de que quiere probar propia cosa penetrador XML de Vim, se puede ...

:filetype indent on   (load indent files for specific file types etc.) 
:e       (to reload the current buffer) 

esto va a cargar el Vimscript en $ VIMRUNTIME/guión/xml .vim

entonces cuando lo hace

:set indentexpr?   

... que va a decir indentexpr = XmlIndentGet (v: LNUM, 1)

~~

xmllint es mejor sin embargo, consulte ... http://vim.wikia.com/wiki/VimTip349

TENGO combinación de teclas útil como esto para que en mi .vimrc!

" one or more lines: 
vmap ,px !xmllint --format -<CR> 

" pretty-print current line 
nmap ,px !!xmllint --format -<CR> 
+1

Tengo curiosidad por qué sientes que xmllint es mejor. En mi experiencia, es demasiado agresivo para eliminar las nuevas líneas en blanco y los comentarios, mientras que el complemento XML incorporado de Vim _only_ sangra el espacio en blanco líder como se esperaba. Como un aparte para los interesados: tuve muchos problemas para hacer funcionar el formateador XML de Vim, hasta que adopté tpope [vim-sensible] (https://github.com/tpope/vim-sensible) valores predeterminados, momento en el que todo "acaba de funcionar", incluido el operador de iguales de vim (=). Ver también http://stackoverflow.com/a/28365920/1207769 – ctrueden

5

Pruebe a escribir: :set equalprg?. Si dice equalprg=, significa que no tiene un programa configurado para la sangría xml, por lo que probablemente esté haciendo una acción predeterminada tonta. He aquí una guía para establecer xmllint como su formateador: http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html

+0

Gracias! Eso funcionó muy bien. Estaba viendo uno de [Screencasts de vim de Derek Wyatt] (http://vimeo.com/15443936) y simplemente asumí que vim sabe cómo anidar xml por sí mismo. – grimetime

+2

Gran referencia a la guía sobre la configuración de xmllint como formateador. El formato de XML puede ser algo muy personalizado ... por ejemplo, es posible que no desee aplicar sangría a todas las etiquetas en todas las situaciones o puede desear el ajuste de texto para nodos largos de texto(). ¡Entonces una alternativa a xmllint podría ser [xmlformat] (http://www.kitebird.com/software/xmlformat/)! – darcyparker

Cuestiones relacionadas