Чи може vim виділити відповідні теги HTML, такі як Notepad ++?


181

VIM має підтримку відповідності пар фігурних дужок, дужок та квадратних дужок. Це чудово підходить для редагування мов C-стилю, таких як PHP та Javascript. Але як щодо відповідності тегів HTML?

Notepad ++ мав цю функцію так довго, як я її використовую. Можливість виявити, де починаються і закінчуються блоки HTML, дуже корисно. Я шукаю щось подібне для vim (див. Зелені теги div):

(бонусна функція: виділення незакритих тегів HTML, як-от червоний тег на цьому скріншоті).

matchit був запропонований як наступний-найкращий, але для його функціонування потрібен додатковий натискання клавіші. Мені хотілося б бачити, де починаються і закінчуються блоки HTML без додаткового натискання клавіші.

Я обходив Інтернет, щоб знайти щось подібне для vim. Мабуть, я не єдиний, по 2 іншим StackOverflow питань і nabble .

Я майже змирився з тим, що vim не зможе візуально відповідати html-тегам. Чи можливо це зробити vim?

Додаток: Якщо наразі це неможливо зробити за допомогою будь-яких існуючих плагінів, чи має майстер вимскрипту там якісь вказівки, як підійти до написання відповідного плагіна?


Чи можете ви пояснити, яким чином ця функція "дуже корисна"? Мені не потрібно в будь-який момент знати все про все. Коли мені потрібно щось знати, Vim покликаний зробити це дуже легко пізнати за дуже мало натискань клавіш.
romainl

17
У той час як мені не потрібно знати все, але вміння легко знати, коли закінчується тег HTML, дозволяє мені переглядати структуру файлу, з яким я працюю. Я також маю справу з безліччю погано написаного коду, тому іноді я стикаюся з HTML-тегом із закритим тегом, який завжди потрібно виправити.
linqq

5
@romainl Я дуже часто читаю вашу відповідь, і мені дуже подобається ваша точка зору. Але цього разу мені доводиться не погоджуватися. Я можу вважати цю особливість не суттєвою, але вважаю, що це досить приємне питання. Мені здається дивним, що існує непростий спосіб отримати це з Vim.
lucapette

1
@lucapette, дякую Мені також подобається питання. Я ніколи не користувався такою функцією і ніколи не відчував потреби в ній. Але це, мабуть, одна з тих речей, без яких ти не можеш жити, як тільки ти спробуєш. Мені подобається, що робочий процес та робоча область є чистими та зосередженими, без «адміністративного сміття», і я думаю, що така функція може бути зайвою. Ідеальний кандидат на плагін. Можливо, можна спробувати взяти натхнення від matchit як вихідного пункту.
ромайнл

6
Ви бачили цю відповідь? stackoverflow.com/questions/1957083/…
Грег Секстон

Відповіді:


219

Мені довелося сьогодні попрацювати з деяким HTML, тому я подумав, що я вирішу це питання. Додано ftplugin на vim.org, який повинен вирішити вашу проблему.

Ви можете отримати його тут на vim.org .

Ви можете отримати його тут на github .

Сподіваюся, це працює для вас. Повідомте мене, якщо у вас є якісь проблеми.


1
Дякую! Саме такий функціонал я шукаю. Лише дві незначні підказки, якщо ви хочете їх виправити: 1. Наразі збігається лише протилежний тег. Чи можна було б також відповідати тегу, на якому знаходиться курсор? 2. Наразі, якщо тег html має атрибути, вони також вибрані. Чи можливо лише вибрати ім'я тега без атрибутів?
linqq

Гарні пропозиції. Про них обох слід подбати про версію v1.2 на vim.org. Зараз збіг регулярного виразів складніший, тому повідомте мені, якщо ви знайдете якісь помилки.
Грег Секстон

1
Як вимагається, я додав цей ftplugin до github. Дивіться мою оновлену відповідь за посиланням.
Грег Секстон

1
@GregSexton Ви зараз офіційно герой;)
lucapette

7
Щойно знайшов це, виглядає добре, але зауважте, що мені довелося додати "плагін файлів" до мого ~ / .vimrc, щоб його включити. Якщо він не працює після того, як ви помістите плагін у свою папку ftplugin, додайте вищезгадане до свого ~ / .vimrc і вам слід все налаштувати.
Джефф

95

Плагін Greg's MatchTag.vim надзвичайний, але я хотів чогось більшого. Я хотів, щоб вкладені теги завжди були виділені, а не лише тоді, коли курсор знаходиться на одному з тегів.

Тому я написав MatchTagAlways, який робить все, що робить Greg's MatchTag, а також завжди виділяє додаючий тег, незалежно від того, де в коді знаходиться курсор. Він також працює з незакритими тегами та мовами шаблонів HTML, такими як Jinja або Handlebars.

Ось GIF, що показує його в дії:

MTA в дії


4
Класне рішення - я б, мабуть, використовував оригінальну версію, але бачу, як це корисно. Я хотів би, щоб більше відповідей мали демонстрації GIF, це приголомшливо!
Джейсон

3
Цілком погоджуйтеся з Джейсоном, +1 для дивовижних хаків GIF.
Дан Бешард

Це працює краще, ніж прийнята відповідь. Але я все ще не впевнений, як перевірити теги, що перевищують вертикальну висоту екрана. Я не можу переміщувати екран повз курсор у vim, а розділений екран не відображає активні теги в обох вікнах.
radix07

1
Ви абсолютна легенда, моє життя стало набагато кращим від цього ... <3
Карл Глазер

1
Це набагато краще, ніж
великодушна

-2

Я прийшов сюди шукати відповідні кутові дужки стилю html у Vim. Це, здається, працює:

:set mps+=<:>
:help matchpairs

7
Цей метод не є рішенням, він просто дозволить '<' матчу '' '
Daniel YC Lin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.