Estoy aprendiendo Vim, pero pensé que era una tarea simple, pero no puedo hacer que funcione. Tengo un navegador SO pero las soluciones no me funcionan.
Estoy intentando sangrar correctamente un archivo (xml). El comando que uso es:
gg=G
o ggVG = (este hecho por mí mismo probablemente hace algo diferente;))
Mi .vimrc es:
syntax on
filetype plugin indent on
set nu

:set ft? indentexpr?¿Se leefiletype=xml indentexpr=XmlIndentGet(v:lnum,1)?m'ggVG='', lo que simplemente guarda la línea en la que se encuentra y regresa a ella después de volver a indentar el archivo.Respuestas:
Me gusta la respuesta de Berei. Sin embargo, creo que lo siguiente es un poco más flexible en el sentido de que no tiene que modificar su
vimrcarchivo. Además, es más fácil formatear partes seleccionadas del archivo XML (algo que hago a menudo).Primero, resalte el XML que desea formatear.
Luego, en modo normal, escriba
! xmllint --format -Su línea de comando en la parte inferior se verá así:
:'<,'>!xmllint --format -Luego presiona Enter.
Explicación técnica
El texto seleccionado se envía al
xmllintcomando, luego se--formatedita y los resultados dexmllintse colocan sobre el texto seleccionado en vim. El-al final del comando es para recibir una entrada estándar, que, en este caso, es el texto seleccionado al que envía vimxmllint.fuente
:%!xmllint --format -,%significa todo el alcance de este archivo XML.apt-cache search, noapt-get, cuando se buscan paquetes y su contenido.libxml2-utilscontiene la herramienta que falta.Utilice un programa externo para sangrar sus
xmlarchivos. En este caso lo elegíxmllint, así que configure el comando en laequalprgopción:Ahora puedes ejecutar
para permitir
xmllintformatear susxmlarchivos.Para conseguirlo cada vez que lo uses empuje, use un
autocommandpara configurarlo.autocommandde un comentario a continuaciónfuente
au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null. Fuente - ku1ik.com/2011/09/08/…libxml2-utilspaquete para obtener xmllintUna solución simple que me gusta y que no requiere ninguna herramienta de terceros es insertar una nueva línea antes de cada etiqueta de apertura '<...>'. Entonces puede usar la sangría automática de vim estándar. En breve:
%s/</\r</ggg=Gsangría automáticafuente
%s/></>\r</g, para que cada elemento de texto permanezca en la misma línea.%s/> *</>\r</gEsto es fácil de lograr una vez que ~ / .vimrc está configurado correctamente.
Configure las siguientes opciones en ~ / .vimrc:
Esto le permite mover el cursor a la parte superior del archivo y sangrar hasta el final: gg = G
También puede seleccionar el texto deseado con el modo visual y presionar = para sangrarlo.
fuente
.vimrclugar de.bashrc.Respuesta corta: Enciende matchit.vim . Puede agregar
packadd matchita su.vimrc, o usar vim-sensible , que lo habilita por defecto.Respuesta larga: he probado muchas estrategias para aplicar sangría automática a XML en Vim, incluido el enfoque xmllint que se analiza en la wiki de Vim . El problema con
xmllint(y el mismo enfoque con otras herramientas CLI externas comoxmlformatytidy, también) es que todas insisten en eliminar nuevas líneas en blanco. Si todo lo que desea es sangrar su XML, sin eliminar líneas en blanco, comentarios y / u otro formato intencional, entoncesxmllintno es la mejor opción.Resulta que el comando equals (=) de Vim ya es compatible con XML, siempre que el script matchit.vim esté habilitado. Una forma súper fácil de habilitarlo es adoptar vim-sensible de tpope . Otro es agregar
packadd matchita su.vimrc. Entonces, el formato XML "simplemente funcionará" desde el primer momento.fuente
matchit.vimes la solución real. Puede habilitarlo en suvimrcagregando esta línea:packadd matchitEn VIM, auto-sangra todo el archivo (usando pestañas duras) usando el siguiente comando:
El
^Ies un carácter único que genera a través de: CTRL+ v, CTRL+ifuente
Yo tuve el mismo problema. Resultó que la línea
en mi
.vimrccausó el problema. Solo asegúrate de que no lo tienes.fuente
La respuesta de Jesse Hogan es buena, pero prefiero una respuesta más simple:
Mientras está en vim y su archivo XML está abierto, en modo normal escriba esto:
luego presione Enter. Se formateará todo su archivo XML.
recuerde que debería haber instalado xmllint antes.
fuente
para los que uno que está utilizando
coc.nvimplug-in, puede instalarcoc-xmlmediante:CocInstall coc-xml, a continuación, asignación de teclas de formato en su archivo de configuración:nmap <silent> fm <Plug>(coc-format). A partir de ahora, puede formatear no solo el archivo xml sino también otro archivo muy fácilmentefuente