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.
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>
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.
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.
Wie Tylerl oben erklärt, stellen Sie Folgendes ein:
:filetype indent on
:set filetype=html
:set smartindent
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"
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.
Ich verwende dieses Skript: https://github.com/maksimr/vim-jsbeautify
In dem obigen Link haben Sie alle Informationen:
:call HtmlBeautify()
ausführenMacht die Arbeit wunderschön!
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.
Haben Sie versucht, das HTML-Einrückungsskript auf der Vim-Site zu verwenden?
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.
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.