Pregunta

¿Cómo soluciono la sangría de sus enormes archivos html que estaban en mal estado?

Probé lo habitual Comando "gg=G", que es lo que uso para corregir la sangría de los archivos de código.Sin embargo, no parecía funcionar correctamente en archivos HTML.Simplemente eliminó todo el formato.

También intenté configurar :filetype = xml, para ver si ayudaría engañarlo haciéndole creer que se trataba de un archivo XML, pero aún así no lo hizo.

¿Fue útil?

Solución

Con filetype indent on dentro de mi .vimrc, Vim sangra muy bien los archivos HTML.

Ejemplo simple con un shiftwidth de 2:

<html>
  <body>
    <p>
    text
    </p>
  </body>
</html>

Otros consejos

Hay varias cosas que todos deben estar en su lugar. Solo para resumirlos todos en una ubicación:

Establezca la siguiente opción:

:filetype indent on
:set filetype=html           # abbrev -  :set ft=html
:set smartindent             # abbrev -  :set si

Luego mueva el cursor hacia la parte superior del archivo y aplique sangría al final: gg =G
O seleccione el texto deseado para sangrar y presione = para sangrarlo.

El principal problema al usar la sangría inteligente es que si el XML (o HTML) se encuentra en una línea, ya que puede terminar regresando de una solicitud curl, entonces gg=G no funcionará. En cambio, acabo de experimentar una buena sangría usando tidy directamente llamado desde VI:

:!tidy -mi -xml -wrap 0 %

Esto básicamente le dice a VI que llame a tidy para limpiar un archivo XML que no ajusta las líneas para que quepan en las líneas predeterminadas de 68 caracteres de ancho. Procesé un gran archivo XML de 29 MB y tardó 5 o 6 segundos. Supongo que para un archivo HTML, el comando debería ser:

:!tidy -mi -html -wrap 0 %

Como se menciona en los comentarios, tidy es una herramienta básica que puede encontrar en muchos sistemas base Linux / MacOS. Aquí está la página del proyecto en caso de que desee tenerlo pero no lo haga: HTML Tidy .

Espero que esto pueda ayudar.

Como Tylerl explica anteriormente, configure lo siguiente:

:filetype indent on
:set filetype=html
:set smartindent

¡Sin embargo!

Tenga en cuenta que en vim 7.4 las etiquetas html html, head, body, y algunos otros son no sangría por defecto.Esto tiene sentido, ya que casi todo el contenido de un archivo html se incluye en esas etiquetas.Si realmente lo desea, puede hacer que esas etiquetas tengan sangría de esta manera:

:let g:html_indent_inctags = "html,body,head,tbody" 

Ver aquí y aquí para más información.

Esta es mi solución que funciona muy bien para abrir " feo " HTML de una manera bien espaciada:

vim fileIn.html -c "set sw=2 | %s/>/>\r/ | execute 'normal gg=G' | set nohlsearch | g/^\\s*\$/d"

El comando sw se debe a que mi valor predeterminado es 4, que es demasiado alto para HTML.

La siguiente parte agrega una nueva línea (Vim piensa que es un retorno de carro, suspiro) después de cada elemento (>)

Luego vuelva a sangrar todo el archivo con =

Luego, resalte set hlsearch (ya que tengo | wq! fileOut.html en mi vimrc)

Luego, elimine todas las líneas vacías / espacios en blanco solamente (vea aquí para obtener más información, también esto tiene doble escape porque está en el shell)

Incluso puede agregar <=> al final si no desea ingresar a Vim, pero simplemente limpie el archivo.

Yo uso este script: https://github.com/maksimr/vim-jsbeautify

En el enlace de arriba tiene toda la información:

  1. Instalar
  2. Configurar (copiar desde el primer ejemplo)
  3. Ejecutar :call HtmlBeautify()

¡Hace el trabajo maravillosamente!

¿Has intentado utilizar el script de sangría HTML en el sitio de Vim?

Aquí hay una solución de gran peso que le da sangría, además de todas las bonitas impresiones HTML que no necesariamente le interesan mientras está editando.

Primero, descargue Tidy . Asegúrese de agregar el binario a su ruta, para que pueda llamarlo desde cualquier ubicación.

A continuación, cree un archivo de configuración que describa su sabor HTML favorito. La documentación no es excelente para Tidy, pero aquí hay una descripción general , y una lista de todas las opciones . Aquí está mi archivo de configuración:

bare: yes
break-before-br: no
clean: yes
drop-proprietary-attributes: yes
fix-uri: yes
indent-spaces: 4
indent: yes
logical-emphasis: yes
markup: yes
output-xhtml: yes
quiet: yes
quote-marks: yes
replace-color: yes
tab-size: 4
uppercase-tags: no
vertical-space: yes
word-2000: yes
wrap: 0

Guarde esto como tidyrc_html.txt en su carpeta ftplugin (en vimfiles).

Un archivo más: agregue la siguiente línea a (o cree) html.vim, también en /tidy:

map <leader>tidy :%! tidy -config ~/vimfiles/ftplugin/tidyrc_html.txt <CR>

Para usarlo, simplemente abra un archivo HTML y escriba /. (Esa <leader> es la tecla <=>.)

¡Ahí tienes! No es una solución rápida, de ninguna manera, pero ahora estás un poco mejor equipado para editar esos archivos HTML enormes y desordenados.

Puede integrar tanto tidy como html-beautify automáticamente instalando el complemento vim -autoformat . Después de eso, puede ejecutar el formateador que esté instalado con una sola pulsación de tecla.

Probé el comando habitual "gg=G", que es el que uso para corregir la sangría de los archivos de código.Sin embargo, no parecía funcionar correctamente en archivos HTML.Simplemente eliminó todo el formato.

Si el formato automático/sangría de vim gg=G parece estar "roto" (como sangría izquierda en cada línea), lo más probable es que el complemento de sangría no esté habilitado/cargado.Realmente debería dar un mensaje de error en lugar de simplemente hacer una sangría incorrecta; de lo contrario, los usuarios simplemente piensan que la función de formato automático/sangría es terrible, cuando en realidad es bastante buena.

Para verificar si el complemento de sangría está habilitado/cargado, ejecute :scriptnames.Ve si .../indent/html.vim está en la lista.De lo contrario, significa que el complemento no está cargado.En ese caso, agregue esta línea a ~/.vimrc:

filetype plugin indent on

Ahora si abres el archivo y ejecutas :scriptnames, debería ver .../indent/html.vim.Entonces corre gg=G, que debería hacer el formato automático/sangría correcto ahora.(Aunque no agregará nuevas líneas, por lo que si todo el código html está en una sola línea, no tendrá sangría).

Nota:si estas corriendo :filetype plugin indent on en la línea de comando vim en lugar de ~/.vimrc, debes volver a abrir el archivo :e.

Además, no necesitas preocuparte por autoindent y smartindent ajustes, no son relevantes para esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top