w3school tag link img div html emacs

tag - ¿Puede emacs volver a indentificar una gran cantidad de HTML para mí?



title label html (10)

De forma predeterminada, cuando visita un archivo .html en Emacs (22 o 23), lo pondrá en html-mode . Probablemente eso no es lo que quieres. Probablemente quieras nxml-mode , que es nxml-mode elegante. nxml-mode parece que solo viene con Emacs 23, aunque puedes descargarlo para versiones anteriores de emacs desde el sitio web nXML . También hay un paquete de Debian y Ubuntu llamado nxml-mode . Puede ingresar nxml-mode con:

M-x nxml-mode

Puede ver la documentación del modo nxml con:

C-h i g (nxml-mode) RET

Dicho todo esto, probablemente tendrá que usar algo como Tidy para volver a formatear su ejemplo xhtml. nxml-mode te sacará de

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head></head> <body> <table> <tr> <td>blah</td></tr></table> </body>

a

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head></head> <body> <table> <tr> <td>blah</td></tr></table> </body> </html>

pero no veo una facilidad más general para hacer saltos de línea en ciertas etiquetas xml como desee. Tenga en cuenta que Cj insertará una nueva línea con la sangría adecuada, por lo que puede hacer una macro rápida o piratear un defun que hará sus tablas.

Al editar HTML en emacs, ¿hay alguna manera de formatear de forma bonita una burbuja de marcado, cambiando algo como esto?

<table> <tr> <td>blah</td></tr></table>

...dentro de esto:

<table> <tr> <td> blah </td> </tr> </table>


En emacs 25, que estoy construyendo actualmente desde la fuente, suponiendo que esté en modo HTML, use
Ctrl - x
marido

para seleccionar todo, y luego presione Tab .


Escribí una función para hacer esto para xml, que funciona bien en nxml-mode. debería funcionar bastante bien para html también:

(defun jta-reformat-xml () "Reformats xml to make it readable (respects current selection)." (interactive) (save-excursion (let ((beg (point-min)) (end (point-max))) (if (and mark-active transient-mark-mode) (progn (setq beg (min (point) (mark))) (setq end (max (point) (mark)))) (widen)) (setq end (copy-marker end t)) (goto-char beg) (while (re-search-forward ">//s-*<" end t) (replace-match ">/n<" t t)) (goto-char beg) (indent-region beg end nil))))


Esta pregunta es bastante antigua, pero no estaba muy contento con las diversas respuestas. Una forma sencilla de volver a aplicar sangría a un archivo HTML, dado que está ejecutando una versión relativamente nueva de emacs (estoy ejecutando 24.4.1) es:

  • abra el archivo en emacs
  • marque el archivo completo con Cx h (nota: si desea ver lo que se está marcando, agregue (setq transient-mark-mode t) a su archivo .emacs )
  • ejecutar Mx indent-region

Lo bueno de este método es que no requiere ningún complemento (sugerencia de Conway), no requiere una regexp de reemplazo (sugerencia de nevcx), ni requiere cambiar de modo (sugerencia de jfm3). La sugerencia de Jay va en la dirección correcta: en general, la ejecución de CMq acuerdo con las reglas de un modo; por ejemplo, CMq funciona, en mi experiencia, en js-mode y en muchos otros modos. Pero ni html-mode ni nxml-mode parecen implementar CMq .


La forma más fácil de hacerlo es a través de la línea de comando.

  • Asegúrate de tener ordenado
  • escribe tidy -i -m <<file_name>>

Tenga en cuenta que la opción -m reemplaza el archivo recién ordenado con el anterior. Si no quiere eso, puede escribir tidy -i -o <<tidied_file_name>> <<untidied_file_name>>

El -i es para sangría. Alternativamente, puede crear un archivo .tidyrc que tenga configuraciones tales como

indent: auto indent-spaces: 2 wrap: 72 markup: yes output-xml: no input-xml: no show-warnings: yes numeric-entities: yes quote-marks: yes quote-nbsp: yes quote-ampersand: no break-before-br: no uppercase-tags: no uppercase-attributes: no

De esta forma, todo lo que tiene que hacer es escribir tidy -o <<tidied_file_name>> <<untidied_file_name>> .

Para más, simplemente escriba man tidy en la línea de comando.


Puede canalizar una región a xmllint (si la tiene) usando:

M-| Shell command on region: xmllint --format -

El resultado terminará en un nuevo buffer.

Hago esto con XML, y funciona, aunque creo que xmllint necesita ciertas otras opciones para trabajar con HTML u otro XML no perfecto. nxml-mode le dirá si tiene un documento bien formado.


Puede hacer sgml-pretty-print y luego indent-for-tab en la misma región / buffer, siempre que esté en modo html o nxml-mode.

sgml-pretty-print agrega nuevas líneas a los lugares adecuados y indent-for-tab agrega una buena sangría. Juntos conducen a html / xml correctamente formateado.


Puedes hacer una regexp de reemplazo

M-x replace-regexp /(</[^>]+>/) /1C-q-j

Aplicar sangría a todo el buffer

C-x h M-x indent-region


Tidy puede hacer lo que quieras, pero parece que solo para todo el buffer (y el resultado es XHTML)

M-x tidy-buffer


http://www.delorie.com/gnu/docs/emacs/emacs_277.html

Después de seleccionar la región que desea corregir. (Para seleccionar el buffer completo use Cx h)

CMq

Reindee todas las líneas dentro de una agrupación entre paréntesis (sangría-sexp).

CM-/

Reinderte todas las líneas en la región (región de sangrado).