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
vimrc
archivo. 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
xmllint
comando, luego se--format
edita y los resultados dexmllint
se 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-utils
contiene la herramienta que falta.Utilice un programa externo para sangrar sus
xml
archivos. En este caso lo elegíxmllint
, así que configure el comando en laequalprg
opción:Ahora puedes ejecutar
para permitir
xmllint
formatear susxml
archivos.Para conseguirlo cada vez que lo uses empuje, use un
autocommand
para configurarlo.autocommand
de un comentario a continuaciónfuente
au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
. Fuente - ku1ik.com/2011/09/08/…libxml2-utils
paquete 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</g
gg=G
sangría automáticafuente
%s/></>\r</g
, para que cada elemento de texto permanezca en la misma línea.%s/> *</>\r</g
Esto 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
.vimrc
lugar de.bashrc
.Respuesta corta: Enciende matchit.vim . Puede agregar
packadd matchit
a 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 comoxmlformat
ytidy
, 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, entoncesxmllint
no 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 matchit
a su.vimrc
. Entonces, el formato XML "simplemente funcionará" desde el primer momento.fuente
matchit.vim
es la solución real. Puede habilitarlo en suvimrc
agregando esta línea:packadd matchit
En VIM, auto-sangra todo el archivo (usando pestañas duras) usando el siguiente comando:
El
^I
es 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
.vimrc
causó 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.nvim
plug-in, puede instalarcoc-xml
mediante: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