Kann Emacs einen großen HTML-Blob für mich neu einrücken?

Lesezeit: 5 Minuten

Benutzer-Avatar
raldi

Gibt es beim Bearbeiten von HTML in Emacs eine Möglichkeit, einen Markup-Blob automatisch hübsch zu formatieren und so etwas zu ändern:

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

…das mögen:

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

  • Dies ist in neueren Versionen von emacs viel einfacher. Dies ist eine Scroll-Down-Situation.

    – Russland muss Putin entfernen

    21. September 2016 um 17:16 Uhr

Du kannst tun sgml-pretty-print und dann indent-for-tab auf der gleichen Region/Puffer, vorausgesetzt, Sie befinden sich im HTML-Modus oder Nxml-Modus.

sgml-pretty-print fügt neue Zeilen an den richtigen Stellen hinzu und indent-for-tab fügt schöne Einkerbung hinzu. Zusammen führen sie zu richtig formatiertem HTML/XML.

  • Gute Antwort. Denken Sie nur daran, vorübergehend in den sgml-Modus zu wechseln, um sgml-pretty-print auszuführen. Gehen Sie dann zurück in den nxml-Modus.

    – cayhorstmann

    21. Januar 2012 um 22:35 Uhr

  • sgml-pretty-print funktionierte für mich von HTML wode ohne Modusumschaltung, danke!

    – dolzenko

    20. Dezember 2013 um 10:23 Uhr

  • Die einzige Antwort, die wirklich funktioniert. Ich meine sogar auf ungültiges XML (also nur einen Teil der HTML-Datei).

    – Mischa Tawchelidse

    11. November 2015 um 11:47 Uhr

Benutzer-Avatar
jfm3

Standardmäßig beim Besuch von a .html Datei in Emacs (22 oder 23), es bringt Sie hinein html-mode. Das ist wahrscheinlich nicht das, was Sie wollen. Du willst wahrscheinlich nxml-modewas ernsthaft schick ist. nxml-mode scheint nur mit Emacs 23 zu kommen, obwohl Sie es für frühere Versionen von Emacs von der herunterladen können nXML-Website. Es gibt auch ein Debian- und Ubuntu-Paket mit dem Namen nxml-mode. Sie können eintreten nxml-mode mit:

M-x nxml-mode

Sie können die Dokumentation zum nxml-Modus anzeigen mit:

C-h i g (nxml-mode) RET

Abgesehen davon müssen Sie wahrscheinlich so etwas wie verwenden Ordentlich um Ihr xhtml-Beispiel neu zu formatieren. nxml-mode wird dich abholen

<!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>

zu

<!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>

aber ich sehe keine allgemeinere Möglichkeit, Zeilenumbrüche bei bestimmten XML-Tags zu machen, wie Sie wollen. Beachten Sie, dass C-j fügt eine neue Zeile mit der richtigen Einrückung ein, sodass Sie möglicherweise ein schnelles Makro erstellen oder a hacken können defun das wird Ihre Tabellen tun.

  • Nachdem ich den nxml-Modus aufgerufen habe, verwende ich Cx h, um die gesamte Region auszuwählen, und dann Mx ‘indent-region’. Sie erhalten korrekt eingerücktes HTML. Danke an den nxml-Modus!

    – zhanxw

    23. Februar 2013 um 18:00 Uhr

  • nxml-mode rückt HTML-Fragmente nicht richtig ein, wahrscheinlich weil sie keinen Doctype haben. Der HTML-Modus funktioniert gut, sobald Sie die Zeilenumbrüche erhalten, wie von @nevcx unten vorgeschlagen

    – Bootscoder

    14. Dezember 2013 um 19:43 Uhr


Benutzer-Avatar
Jay

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

Nachdem Sie die Region ausgewählt haben, die Sie reparieren möchten. (Um den gesamten Puffer auszuwählen, verwenden Sie Cx h)

CMq

Alle Zeilen innerhalb einer Klammergruppierung neu einrücken (Einzug-sexp).

CM-\

Alle Zeilen in der Region neu einrücken (indent-region).

  • Das funktioniert bei mir nicht – im obigen Beispiel macht CMq nichts und CM-\ gibt eine völlig falsche Einrückung aus.

    – raldi

    26. September 2008 um 1:06 Uhr

  • Funktioniert bei mir auch nicht im nxml-Modus. index-sexp und indent-region werden Code einrücken, der bereits Zeilenumbrüche enthält, in diesem Beispiel fehlen einige.

    – Justin Tanner

    26. September 2008 um 3:30 Uhr

  • CX h x Einzugsbereich

    – Richard Gomes

    28. Juli 2016 um 1:42 Uhr


Benutzer-Avatar
jtahlborn

Ich habe selbst eine Funktion geschrieben, um dies für xml zu tun, die im nxml-Modus gut funktioniert. sollte auch für html ziemlich gut funktionieren:

(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))))

Sie können einen regulären Ausdruck ersetzen

 M-x replace-regexp

 \(</[^>]+>\)

 \1C-q-j

Den gesamten Puffer einrücken

 C-x h
 M-x indent-region

Benutzer-Avatar
Abhillman

Diese Frage ist ziemlich alt, aber ich war mit den verschiedenen Antworten nicht wirklich zufrieden. Eine einfache Möglichkeit, eine HTML-Datei neu einzurücken, da Sie eine relativ neuere Version von emacs ausführen (ich verwende 24.4.1), ist:

  • Öffnen Sie die Datei in Emacs
  • Markieren Sie die gesamte Datei mit C-x h (Hinweis: Wenn Sie sehen möchten, was markiert wird, fügen Sie hinzu (setq transient-mark-mode t) zu deinem .emacs Datei)
  • ausführen M-x indent-region

Das Schöne an dieser Methode ist, dass sie keine Plugins benötigt (Vorschlag von Conway), keinen regulären Ausdruck ersetzen muss (Vorschlag von nevcx) und auch keine Modi wechseln muss (Vorschlag von jfm3). Jays Vorschlag geht in die richtige Richtung – im Allgemeinen in die Ausführung C-M-q wird gemäß den Regeln eines Modus einrücken – zum Beispiel C-M-q wirkt meiner Erfahrung nach in js-mode und in mehreren anderen Modi. Doch keins html-mode Noch nxml-mode scheinen nicht umzusetzen C-M-q.

Benutzer-Avatar
Russland muss Putin entfernen

Verwenden Sie in emacs 25, das ich derzeit aus dem Quellcode baue, vorausgesetzt, Sie befinden sich im HTML-Modus
Strgx
h

um alle auszuwählen, und drücken Sie dann Tab.

1308560cookie-checkKann Emacs einen großen HTML-Blob für mich neu einrücken?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy