Чи може 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.