Vim può evidenziare tag HTML corrispondenti come Notepad ++?


181

VIM ha il supporto per l'abbinamento di coppie di parentesi graffe, parentesi e parentesi quadre. Questo è ottimo per la modifica di linguaggi in stile C come PHP e Javascript. Ma per quanto riguarda l'abbinamento dei tag HTML?

Notepad ++ ha questa funzionalità da quando la utilizzo. Essere in grado di individuare dove iniziano e finiscono blocchi di HTML è molto utile. Quello che sto cercando è qualcosa di simile per vim (vedi i tag div verdi):

(una caratteristica bonus: evidenziare i tag HTML non chiusi, come il tag rosso in questo screenshot).

matchit è stato proposto come la cosa migliore, ma richiede una sequenza di tasti extra per utilizzare la sua funzionalità. Mi piacerebbe poter vedere dove iniziano e finiscono i blocchi di HTML senza premere un tasto in più.

Ho navigato su Internet per trovare qualcosa del genere per Vim. Apparentemente, non sono l'unico, secondo altre 2 domande StackOverflow e nabble .

Mi sono quasi rassegnato a non essere in grado di abbinare visivamente i tag HTML. È possibile per Vim farlo?

Addendum: se al momento non è possibile farlo con nessun plug-in esistente, qualche procedura guidata di vimscript ha qualche suggerimento su come affrontare la scrittura di un plug-in adatto?


Potresti spiegare in che modo questa funzione "è molto utile"? Non ho davvero bisogno di sapere tutto su tutto in ogni momento. Quando ho bisogno di sapere qualcosa, Vim è progettato per renderlo molto semplice da sapere in pochissime battute.
Romainl,

17
Anche se non ho bisogno di sapere tutto, essere in grado di sapere facilmente quando termina un tag HTML mi consente di individuare la struttura del file con cui sto lavorando. Mi occupo anche di un sacco di codice scritto male, quindi a volte incontrerò un tag html senza tag di chiusura, che deve sempre essere corretto.
linqq,

5
@romainl Ho letto la tua risposta molto spesso e mi piace molto il tuo punto di vista. Ma questa volta non sono d'accordo. Posso considerare questa funzionalità non essenziale, ma trovo che questa sia una domanda piuttosto carina. Mi sembra strano che non ci sia un modo semplice per ottenerlo con Vim.
lucapette,

1
@lucapette, grazie. Mi piace anche la domanda, in realtà. Non ho mai usato una tale funzionalità e non ne ho mai sentito il bisogno. Ma è probabilmente una di quelle cose di cui non puoi vivere senza aver provato. Mi piace che il mio flusso di lavoro e lo spazio di lavoro siano puliti e focalizzati, liberi da "detriti amministrativi" e penso che una tale funzionalità potrebbe essere superflua. Il candidato perfetto per un plugin. Uno potrebbe provare a prendere ispirazione dal matchit come punto di partenza, probabilmente.
romainl

Risposte:


219

Ho dovuto lavorare con un po 'di HTML oggi, quindi ho pensato di affrontarlo. Aggiunto un ftplugin a vim.org che dovrebbe risolvere il tuo problema.

Puoi trovarlo qui su vim.org .

Puoi trovarlo qui su Github .

Spero che funzioni per te. Fammi sapere se hai problemi.


1
Grazie! Questa è esattamente la funzionalità che sto cercando. Solo due cavilli minori, se hai voglia di risolverli: 1. Attualmente, è abbinato solo il tag opposto. Sarebbe possibile abbinare anche il tag su cui si trova il cursore? 2. Attualmente, se un tag html ha degli attributi, anche quelli sono selezionati. È possibile selezionare solo il nome del tag, senza attributi?
Linqq,

Buoni suggerimenti. Dovrebbero essere curati entrambi nella versione 1.2 su vim.org. Il regex corrispondente ora è più complicato, quindi fammi sapere se trovi qualche bug.
Greg Sexton,

1
Come richiesto, ho aggiunto questo ftplugin a github. Vedi la mia risposta aggiornata per il link.
Greg Sexton,

1
@GregSexton ora sei ufficialmente un eroe;)
lucapette,

7
Ho appena trovato questo, sembra buono, ma nota che ho dovuto aggiungere "plug-in filetype" al mio ~ / .vimrc per farlo accendere. Se non funziona dopo aver inserito il plug-in nella cartella ftplugin, aggiungi quanto sopra al tuo ~ / .vimrc e dovresti essere pronto.
Geoff,

95

Il plug-in MatchTag.vim di Greg è fantastico, ma volevo qualcosa di più. Volevo che i tag che lo racchiudessero sempre fossero evidenziati, non solo quando il cursore si trova su uno dei tag.

Così ho scritto MatchTagAlways che fa tutto quello che Greg MatchTag fa e mette sempre in evidenza il tag che lo racchiude, indipendentemente da dove si trovi il cursore nel codice. Funziona anche con tag non chiusi e linguaggi di template HTML come Jinja o Handlebars.

Ecco una GIF che mostra in azione:

MTA in azione


4
Soluzione interessante: probabilmente userò la versione originale, ma posso vedere come sia utile. Vorrei che più risposte avessero demo GIF, è fantastico!
Jason,

3
Totalmente d'accordo con Jason, +1 per incredibili hack GIF.
Dan Bechard

Funziona meglio della risposta accettata. Ma non sono ancora sicuro di come verificare i tag oltre l'altezza dello schermo verticale. Non riesco a spostare lo schermo oltre il cursore in vim e uno schermo diviso non mostra i tag attivi in ​​entrambe le finestre.
radix07,

1
Leggenda assoluta, la mia vita è diventata molto migliore da questo ... <3
Karl Glaser,

1
Questo è molto meglio della risposta
generosa

-2

Sono venuto qui alla ricerca di parentesi angolari stile html corrispondenti in Vim. Questo sembra funzionare:

:set mps+=<:>
:help matchpairs

7
Questo metodo non è la soluzione, lascia semplicemente "<" abbinare a ">"
Daniel YC Lin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.