Ich lerne Vim, aber ich dachte, das sei eine einfache Aufgabe, aber ich kann sie nicht zum Laufen bringen. Ich habe Browser SO, aber die Lösungen funktionieren nicht für mich.
Ich versuche, eine Datei (xml) korrekt einzurücken. Der Befehl, den ich benutze, ist:
gg=G
oder ggVG = (selbst gemacht, macht wahrscheinlich etwas anderes;))
Mein .vimrc ist:
syntax on
filetype plugin indent on
set nu
:set ft? indentexpr?
Liest esfiletype=xml indentexpr=XmlIndentGet(v:lnum,1)
?!m'ggVG=''
und sie erstellen, wodurch einfach die Linie gespeichert wird, auf der Sie sich befinden, und nach dem erneuten Einrücken der Datei wieder dorthin zurückgekehrt wird.Antworten:
Ich mag Bereis Antwort. Ich denke jedoch, dass das Folgende etwas flexibler ist, da Sie Ihre
vimrc
Datei nicht ändern müssen . Außerdem ist es einfacher, ausgewählte Teile der XML-Datei zu formatieren (was ich zufällig oft mache).Markieren Sie zunächst das XML, das Sie formatieren möchten.
Geben Sie dann im normalen Modus ein
! xmllint --format -
Ihre Befehlszeile unten sieht folgendermaßen aus:
:'<,'>!xmllint --format -
Drücken Sie dann die Eingabetaste.
Technische Erklärung
Der ausgewählte Text wird dann an den
xmllint
Befehl gesendet--format
bearbeitet, und die Ergebnisse vonxmllint
werden in vim über dem ausgewählten Text platziert. Das-
am Ende des Befehls stehende Element dient zum Empfangen von Standardeingaben. In diesem Fall handelt es sich um den ausgewählten Text, an den vim sendetxmllint
.quelle
:%!xmllint --format -
,%
bedeutet dies den gesamten Umfang dieser XML-Datei.apt-cache search
Nicht verwendenapt-get
, wenn nach Paketen und Paketinhalten gesucht wird.libxml2-utils
enthält das fehlende Werkzeug.Verwenden Sie ein externes Programm, um Ihre
xml
Dateien einzurücken . In diesem Fall habe ich ausgewähltxmllint
, also setzen Sie den Befehl auf dieequalprg
Option:Jetzt können Sie ausführen
um
xmllint
Ihrexml
Dateien formatieren zu lassen .Um es jedes Mal zu bekommen, wenn Sie es verwenden vimVerwenden Sie ein
autocommand
, um es einzustellen.autocommand
aus einem Kommentar untenquelle
au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
. Quelle - ku1ik.com/2011/09/08/…libxml2-utils
Paket installieren , um xmllintEine einfache Lösung, die mir gefällt und für die kein Tool von Drittanbietern erforderlich ist, besteht darin, vor jedem öffnenden Tag '<...>' eine neue Zeile einzufügen. Dann können Sie die standardmäßige automatische Einrückung von vim verwenden. Zusamenfassend:
%s/</\r</g
gg=G
automatisch einrückenquelle
%s/></>\r</g
, damit jedes Textelement in derselben Zeile bleibt.%s/> *</>\r</g
Dies ist leicht zu erreichen, wenn ~ / .vimrc richtig eingerichtet ist.
Stellen Sie die folgenden Optionen in ~ / .vimrc ein:
Auf diese Weise können Sie den Cursor an den Anfang der Datei bewegen und bis zum Ende einrücken: gg = G.
Sie können den gewünschten Text auch im visuellen Modus auswählen und = drücken, um ihn einzurücken.
quelle
.vimrc
statt sein.bashrc
.Kurze Antwort: Schalten Sie matchit.vim ein . Sie können
packadd matchit
zu Ihrem hinzufügen.vimrc
oder vim-sense verwenden , wodurch es standardmäßig aktiviert wird.Lange Antwort: Ich habe viele Strategien zum automatischen Einrücken von XML in Vim ausprobiert, einschließlich des im Vim-Wiki diskutierten xmllint-Ansatzes . Das Problem mit
xmllint
(und dem gleichen Ansatz mit anderen externen CLI-Tools wiexmlformat
undtidy
auch) ist, dass alle darauf bestehen, leere Zeilenumbrüche herauszuquetschen. Wenn Sie lediglich Ihr XML einrücken möchten, ohne Leerzeilen, Kommentare und / oder andere absichtliche Formatierungen zu entfernen,xmllint
ist dies nicht die beste Wahl.Es stellt sich heraus, dass der Befehl equals (=) von Vim bereits XML unterstützt, solange das Skript matchit.vim aktiviert ist. Eine super einfache Möglichkeit, dies zu ermöglichen, besteht darin, das vim-sensible von tpope zu übernehmen . Eine andere ist,
packadd matchit
zu Ihrem hinzuzufügen.vimrc
. Dann funktioniert die XML-Formatierung sofort.quelle
matchit.vim
es die eigentliche Lösung zu sein. Sie können es in Ihrem aktivieren,vimrc
indem Sie diese Zeile hinzufügen:packadd matchit
In VIM rücke ich die gesamte Datei automatisch ein (mit festen Registerkarten), indem ich den folgenden Befehl verwende:
Das
^I
ist ein einzelnes Zeichen, das Sie generieren über: CTRL+ v, CTRL+iquelle
Ich hatte das gleiche Problem. Es stellte sich heraus, dass die Linie
in meinem
.vimrc
verursachte das Problem. Stellen Sie nur sicher, dass Sie es nicht haben.quelle
Jesse Hogans Antwort ist gut, aber ich möchte lieber eine einfachere Antwort:
Während Sie sich in vim befinden und Ihre XML-Datei geöffnet ist, schreiben Sie im normalen Modus Folgendes:
Drücken Sie dann die Eingabetaste. Ihre gesamte XML-Datei wird formatiert.
Denken Sie daran, dass Sie xmllint vorher installiert haben sollten .
quelle
für diejenigen ein , die unter Verwendung von
coc.nvim
Plugin können Sie installierencoc-xml
durch:CocInstall coc-xml
, dann Format abbildet Schlüssel in Ihrer Konfigurationsdatei:nmap <silent> fm <Plug>(coc-format)
. Von nun an können Sie nicht nur XML-Dateien, sondern auch andere Dateien ganz einfach formatierenquelle