web-dev-qa-db-de.com

Wie kann ich den Einzug einer HTML-Datei in VI aufräumen?

Wie kann ich den Einzug seiner riesigen HTML-Dateien korrigieren, der durcheinander war?

Ich habe den üblichen "gg = G" -Befehl ausprobiert, mit dem ich die Einrückung von Code-Dateien korrigiere. Bei HTML-Dateien schien es jedoch nicht richtig zu funktionieren. Es wurden einfach alle Formatierungen entfernt.

Ich habe auch versucht, :filetype = xml zu setzen, um zu sehen, ob ein Trick dazu führt, dass dies eine XML-Datei ist, würde helfen, aber es hat es trotzdem nicht getan.

113
mmcdole

Mit filetype indent on in meinem .vimrc legt Vim HTML-Dateien ziemlich gut ein.

Einfaches Beispiel mit einer shiftwidth von 2:

<html>
  <body>
    <p>
    text
    </p>
  </body>
</html>
84
marcog

Es gibt mehrere Dinge, die alle vorhanden sein müssen. Um sie alle an einem Ort zusammenzufassen:

Stellen Sie die folgende Option ein:

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

Dann entweder den Cursor an den Anfang der Datei bewegen und bis zum Ende einrücken: gg=G
Oder wählen Sie den gewünschten Text zum Einrücken und Drücken aus = um es einzurücken.

166
tylerl

Das Hauptproblem bei der intelligenten Einrückung ist, dass, wenn XML (oder HTML) in einer Zeile steht, da es am Ende von einer Curl-Anforderung zurückkommt, gg=G den Trick nicht macht. Stattdessen habe ich gerade eine gute Einrückung erlebt, indem ich ordentlich direkt aus VI aufgerufen habe:

:!tidy -mi -xml -wrap 0 %

Dies gibt dem VI grundsätzlich die Anweisung, ordentlich aufzurufen, um eine XML-Datei zu bereinigen, ohne die Zeilen zu umbrechen, damit sie in die standardmäßigen Zeilen mit 68 Zeichen passen. Ich habe eine große 29-MB-XML-Datei verarbeitet, die 5 oder 6 Sekunden gedauert hat. Ich denke, für eine HTML-Datei sollte der Befehl daher lauten:

:!tidy -mi -html -wrap 0 %

Wie bereits erwähnt, ist tidy ein grundlegendes Werkzeug, das Sie auf vielen Linux/MacOS-Basissystemen finden können. Hier ist die Seite des Projekts, falls Sie es wünschen, aber nicht: HTML Tidy .

Hoffe das könnte helfen.

50
oscaroscar

Wie Tylerl oben erklärt, stellen Sie Folgendes ein:

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

Jedoch!

Beachten Sie, dass in vim 7.4 die html-Tags html, head, body und einige andere standardmäßig nicht eingerückt sind. Dies ist sinnvoll, da fast alle Inhalte in einer HTML-Datei unter diese Tags fallen. Wenn Sie wirklich wollen, können Sie diese Tags wie folgt eingerückt bekommen:

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

Siehe hier und hier für weitere Informationen.

46
Cory Klein

Dies ist meine Lösung, die sich gut eignet, um "hässliche" HTML-Dateien in einem bestimmten Abstand zu öffnen:

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

Der Befehl sw ist, weil mein Standardwert 4 ist, was für HTML zu hoch ist.

Der nächste Teil fügt nach jedem Element eine neue Zeile hinzu (Vim meint, es sei ein Wagenrücklauf, seufzte) (>)

Dann rücken Sie die gesamte Datei erneut mit = ein.

Dann markieren Sie > (da ich set hlsearch in meinem vimrc habe)

Entfernen Sie dann alle leeren Zeilen/Leerzeichen (siehe hier für mehr Informationen, auch dies ist doppelt geschützt, da es sich in der Shell befindet).

Sie können sogar | wq! fileOut.html am Ende hinzufügen, wenn Sie Vim überhaupt nicht eingeben möchten, sondern nur die Datei bereinigen.

10
adam_0

Ich verwende dieses Skript: https://github.com/maksimr/vim-jsbeautify

In dem obigen Link haben Sie alle Informationen:

  1. Installieren
  2. Konfigurieren (aus dem ersten Beispiel kopieren)
  3. :call HtmlBeautify() ausführen

Macht die Arbeit wunderschön!

6
SimonW

Hier ist eine schwere Lösung, mit der Sie mehr einrücken können, und all das hübsche HTML-Drucken, das Sie beim Bearbeiten nicht unbedingt beachten müssen.

Laden Sie zuerst Tidy herunter. Stellen Sie sicher, dass Sie die Binärdatei zu Ihrem Pfad hinzufügen, damit Sie sie von einem beliebigen Ort aus aufrufen können.

Als Nächstes erstellen Sie eine Konfigurationsdatei, die Ihre bevorzugte HTML-Variante beschreibt. Die Dokumentation ist nicht gut für Tidy, aber hier ist eine Übersicht und eine Liste von allen Optionen . Hier ist meine Konfigurationsdatei:

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

Speichern Sie dies unter tidyrc_html.txt in Ihrem ftplugin-Ordner (unter vimfiles).

Noch eine Datei: Fügen Sie die folgende Zeile zu (oder erstellen Sie) html.vim, auch in ftplugin:

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

Öffnen Sie dazu einfach eine HTML-Datei und geben Sie /tidy ein. (Dieser / ist der <leader>-Schlüssel.)

Da gehts! Auf keinen Fall eine schnelle Lösung, aber jetzt sind Sie für die Bearbeitung dieser riesigen, durcheinandergebrachten HTML-Dateien etwas besser gerüstet.

4
Lemur

Haben Sie versucht, das HTML-Einrückungsskript auf der Vim-Site zu verwenden?

4
JaredPar

Sie können tidy und html-beautify automatisch integrieren, indem Sie das Plugin vim-autoformat ..__ installieren. Danach können Sie den jeweils installierten Formatierer mit einem einzigen Tastendruck ausführen.

2

Ich habe den üblichen Befehl "gg = G" ausprobiert, mit dem ich die Einrückung von Code-Dateien korrigiere. Bei HTML-Dateien schien es jedoch nicht richtig zu funktionieren. Es wurden einfach alle Formatierungen entfernt.

Wenn vims autoformat/indent gg=G "gebrochen" zu sein scheint (z. B. das Einrücken der Zeilen in jeder Zeile), ist das Plugin für den Einzug wahrscheinlich nicht aktiviert/geladen. Es sollte wirklich eine Fehlermeldung ausgegeben werden, anstatt nur ein schlechtes Einrücken durchzuführen. Andernfalls halten die Benutzer die Autoformat-/Einrückungsfunktion für schrecklich, wenn sie tatsächlich ziemlich gut ist.

Um zu prüfen, ob das Indent-Plugin aktiviert/geladen ist, führen Sie :scriptnames aus. Prüfen Sie, ob .../indent/html.vim in der Liste enthalten ist. Wenn nicht, bedeutet dies, dass das Plugin nicht geladen ist. In diesem Fall fügen Sie diese Zeile zu ~/.vimrc hinzu:

filetype plugin indent on

Wenn Sie nun die Datei öffnen und :scriptnames ausführen, sollte .../indent/html.vim angezeigt werden. Führen Sie dann gg=G aus, das jetzt das korrekte Autoformat/Einzug ausführen soll. (Obwohl es keine Zeilenumbrüche hinzufügt, wird der HTML-Code also nur in einer Zeile angezeigt, wird er nicht eingerückt).

Hinweis: Wenn Sie :filetype plugin indent on in der vim-Befehlszeile anstelle von ~/.vimrc ausführen, müssen Sie die Datei :e erneut öffnen.

Sie müssen sich auch keine Gedanken über autoindent und smartindent machen, sie sind nicht relevant.

0
wisbucky