Kann vim passende HTML-Tags wie Notepad ++ hervorheben?

181

VIM unterstützt das Anpassen von Paaren von geschweiften Klammern, Klammern und eckigen Klammern. Dies ist ideal zum Bearbeiten von Sprachen im C-Stil wie PHP und Javascript. Aber was ist mit passenden HTML-Tags?

Notepad ++ hat diese Funktion schon so lange, wie ich sie benutze. Es ist sehr nützlich zu erkennen, wo HTML-Blöcke beginnen und enden. Was ich suche, ist so etwas für vim (siehe die grünen div-Tags):

(Eine Bonusfunktion: Hervorheben nicht geschlossener HTML-Tags, wie das rote Tag in diesem Screenshot).

matchit wurde als nächstbeste Sache vorgeschlagen, erfordert jedoch einen zusätzlichen Tastendruck, um seine Funktionalität nutzen zu können. Ich möchte ohne zusätzlichen Tastendruck sehen können, wo die HTML-Blöcke beginnen und enden.

Ich habe das Internet durchsucht, um so etwas für vim zu finden. Anscheinend bin ich nicht der einzige, laut 2 anderen StackOverflow- Fragen und Nabble .

Ich habe mich fast damit abgefunden, dass ich nicht in der Lage bin, HTML-Tags visuell abzugleichen. Kann vim dies tun?

Nachtrag: Wenn dies derzeit mit vorhandenen Plugins nicht möglich ist, gibt es in einem Vimscript-Assistenten Hinweise, wie Sie ein geeignetes Plugin schreiben können?

linqq
quelle
Können Sie erklären, auf welche Weise diese Funktion "sehr nützlich" ist? Ich muss nicht wirklich jeden Moment alles über alles wissen. Wenn ich etwas wissen muss, ist Vim so konzipiert, dass es mit nur wenigen Tastenanschlägen sehr einfach zu erkennen ist.
Romainl
16
Ich muss zwar nicht alles wissen, aber wenn ich leicht wissen kann, wann ein HTML-Tag endet, kann ich die Struktur der Datei, mit der ich arbeite, überprüfen. Ich beschäftige mich auch mit viel schlecht geschriebenem Code, so dass ich manchmal auf ein HTML-Tag ohne schließendes Tag stoße, das immer repariert werden muss.
Linqq
5
@romainl Ich habe deine Antwort sehr oft gelesen und ich mag deine Sichtweise wirklich. Aber diesmal muss ich nicht zustimmen. Ich kann diese Funktion als nicht wesentlich betrachten, aber ich finde, dass dies eine ziemlich nette Frage ist. Für mich sieht es seltsam aus, dass es mit Vim keinen einfachen Weg gibt, es zu bekommen.
Lucapette
1
@ Lucapette, danke. Eigentlich mag ich die Frage auch. Ich habe noch nie eine solche Funktion verwendet und ich habe nie das Bedürfnis danach gespürt. Aber es ist wahrscheinlich eines der Dinge, ohne die Sie nicht leben können, wenn Sie es einmal versuchen. Ich mag meinen Workflow und meinen Arbeitsbereich sauber und konzentriert, frei von "administrativen Abfällen", und ich denke , eine solche Funktion könnte überflüssig sein. Der perfekte Kandidat für ein Plugin. Man könnte wahrscheinlich versuchen, sich von Matchit als Ausgangspunkt inspirieren zu lassen.
Romainl
6
Hast du diese Antwort gesehen? stackoverflow.com/questions/1957083/…
Greg Sexton

Antworten:

219

Ich musste heute mit etwas HTML arbeiten, also dachte ich, ich würde das angehen. Fügte vim.org ein ftplugin hinzu, das Ihr Problem lösen sollte.

Sie können es hier auf vim.org bekommen .

Sie können es hier auf Github bekommen .

Hoffe es funktioniert bei dir. Lassen Sie mich wissen, wenn Sie Probleme haben.

Greg Sexton
quelle
1
Danke dir! Das ist genau die Funktionalität, die ich suche. Nur zwei kleinere Probleme, wenn Sie sie beheben möchten: 1. Derzeit wird nur das gegenüberliegende Tag abgeglichen. Wäre es möglich, auch das Tag zu finden, auf dem sich der Cursor befindet? 2. Wenn ein HTML-Tag derzeit Attribute enthält, werden diese ebenfalls ausgewählt. Ist es möglich, nur den Tag-Namen ohne Attribute auszuwählen?
Linqq
Gute Vorschläge. Sie sollten beide in Version 1.2 auf vim.org behandelt werden. Der passende reguläre Ausdruck ist jetzt komplizierter. Lassen Sie mich wissen, wenn Sie Fehler finden.
Greg Sexton
1
Wie gewünscht habe ich dieses ftplugin zu github hinzugefügt. Siehe meine aktualisierte Antwort für den Link.
Greg Sexton
1
@ GregSexton du bist jetzt offiziell ein Held;)
Lucapette
7
Ich habe das gerade gefunden, sieht gut aus, aber beachte, dass ich meinem ~ / .vimrc "Dateityp-Plugin ein" hinzufügen musste, damit es sich einschaltet. Wenn es nicht funktioniert, nachdem Sie das Plugin in Ihrem ftplugin-Ordner abgelegt haben, fügen Sie das Obige zu Ihrem ~ / .vimrc hinzu, und Sie sollten fertig sein.
Geoff
94

Gregs MatchTag.vim-Plugin ist großartig, aber ich wollte etwas mehr. Ich wollte, dass die umschließenden Tags immer hervorgehoben werden, nicht nur, wenn sich der Cursor auf einem der Tags befindet.

Also habe ich MatchTagAlways geschrieben, das alles macht, was Gregs MatchTag macht, und auch immer das einschließende Tag hervorhebt, egal wo sich der Cursor im Code befindet. Es funktioniert auch mit nicht geschlossenen Tags und HTML-Vorlagensprachen wie Jinja oder Lenker.

Hier ist ein GIF, das es in Aktion zeigt:

MTA in Aktion

Valloric
quelle
4
Coole Lösung - Ich würde wahrscheinlich die Originalversion verwenden, aber ich kann sehen, wie hilfreich dies ist. Ich wünschte, mehr Antworten hätten GIF-Demos, das ist großartig!
Jason
3
Stimme Jason voll und ganz zu, +1 für erstaunliche GIF-Hacks.
Dan Bechard
Dies funktioniert besser als die akzeptierte Antwort. Ich bin mir jedoch immer noch nicht sicher, wie ich Tags überprüfen soll, die über die vertikale Bildschirmhöhe hinausgehen. Ich kann den Bildschirm in vim nicht über den Cursor hinaus bewegen, und auf einem geteilten Bildschirm werden die aktiven Tags in beiden Fenstern nicht angezeigt.
Radix07
1
Du absolute Legende, mein Leben ist dadurch so viel besser geworden ... <3
Karl Glaser
1
Dies ist viel besser als Kopfgeld Antwort
MohitC
-2

Ich bin hierher gekommen, um nach passenden spitzen Klammern im HTML-Stil in Vim zu suchen. Das scheint zu funktionieren:

:set mps+=<:>
:help matchpairs
Chris X.
quelle
7
Diese Methode ist nicht die Lösung, sie lässt nur '<' mit '>' übereinstimmen
Daniel YC Lin