it-swarm.com.de

Kann emacs einen großen HTML-Fleck für mich einrücken?

Wenn Sie HTML in emacs bearbeiten, gibt es eine Möglichkeit, einen Markup-Blob-Format automatisch hübsch zu formatieren und etwa Folgendes zu ändern:

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

...das sehr gut finden:

<table>
 <tr>
  <td>
   blah
  </td>
 </tr>
</table>
65
raldi

Wenn Sie eine .html-Datei in Emacs (22 oder 23) besuchen, werden Sie standardmäßig in html-mode gestellt. Das ist wahrscheinlich nicht das, was Sie wollen. Sie möchten wahrscheinlich nxml-mode, was wirklich ausgefallen ist. nxml-mode scheint nur mit Emacs 23 zu kommen, obwohl Sie ihn für frühere Emacs-Versionen von der nXML-Website herunterladen können. Es gibt auch ein Debian- und Ubuntu-Paket mit dem Namen nxml-mode. Sie können nxml-mode eingeben mit:

M-x nxml-mode

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

C-h i g (nxml-mode) RET

Abgesehen davon müssen Sie wahrscheinlich etwas wie Tidy verwenden, um Ihr xhtml-Beispiel neu zu formatieren. nxml-mode holt Sie ab

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

ich sehe jedoch keine allgemeinere Möglichkeit, Zeilenumbrüche für bestimmte XML-Tags nach Belieben durchzuführen. Beachten Sie, dass C-j eine neue Zeile mit der richtigen Einrückung einfügt, sodass Sie möglicherweise ein schnelles Makro erstellen oder eine defun hacken können, die Ihre Tabellen bearbeitet.

28
jfm3

Sie können sgml-pretty-print und dann indent-for-tab für dieselbe Region/denselben Puffer ausführen, vorausgesetzt, Sie befinden sich im HTML-Modus oder im Nxml-Modus.

sgml-pretty-print fügt neue Zeilen an den richtigen Stellen hinzu und indent-for-tab fügt die Nizza-Einrückung hinzu. Zusammen führen sie zu korrekt formatiertem HTML/XML.

92
vava

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

Nachdem Sie die Region ausgewählt haben, die Sie korrigieren möchten. (Um den gesamten Puffer auszuwählen, verwenden Sie C-x h)

C-M-q

Alle Zeilen innerhalb einer Klammergruppe (indent-sexp) neu einblenden.

CM-\

Alle Linien in der Region (Einrückungsbereich) neu ausrichten. 

13
Jay

ich habe selbst eine Funktion geschrieben, um dies für XML zu tun, was im nxml-Modus gut funktioniert. sollte auch für html 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))))
10
jtahlborn

Sie können einen Regex ersetzen

 M-x replace-regexp

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

 \1C-q-j

Den gesamten Puffer einrücken

 C-x h
 M-x indent-region
8
nevcx

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

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

Das Schöne an dieser Methode ist, dass sie keine Plugins benötigt (Vorschlag von Conway), kein Ersetzen von regexp (Vorschlag von nevcx) oder ein Umschalten zwischen den Modi (Vorschlag von jfm3). Jays Vorschlag ist in die richtige Richtung - im Allgemeinen wird die Ausführung von C-M-q gemäß den Regeln eines Modus eingerückt. Beispielsweise funktioniert C-M-q nach meiner Erfahrung in js-mode und in mehreren anderen Modi. Weder html-mode noch nxml-mode scheinen C-M-q zu implementieren. 

6
abhillman

Tidy kann machen, was Sie wollen, aber nur für den gesamten Puffer scheint es (und das Ergebnis ist XHTML) 

M-x tidy-buffer
6
Chris Conway

Sie können eine Region an xmllint weiterleiten (falls vorhanden), indem Sie Folgendes verwenden:

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

Das Ergebnis wird in einem neuen Puffer abgelegt.

Ich mache das mit XML, und es funktioniert, obwohl ich glaube, dass xmllint andere Optionen benötigt, um mit HTML oder anderen nicht perfekten XML-Dateien zu arbeiten. Im nxml-Modus erfahren Sie, ob Sie ein wohlgeformtes Dokument haben.

4
Geoff

Verwenden Sie in Emacs 25, das ich derzeit aus dem Quellcode erstelle, sofern Sie sich im HTML-Modus befinden
Ctrl-x
h

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

4
Aaron Hall

Am einfachsten geht das über die Kommandozeile.

  • Stellen Sie sicher, dass Sie ordentlich installiert haben
  • tippe tidy -i -m <<file_name>>

Beachten Sie, dass die Option -m die neu aufgeräumte Datei durch die alte ersetzt. Wenn Sie das nicht möchten, können Sie tidy -i -o <<tidied_file_name>> <<untidied_file_name>> eingeben.

Der -i dient zum Einrücken. Alternativ können Sie eine .tidyrc -Datei mit Einstellungen wie erstellen

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

Auf diese Weise müssen Sie nur tidy -o <<tidied_file_name>> <<untidied_file_name>> eingeben.

Geben Sie einfach man tidy in die Befehlszeile ein.

0
user1454331