vim可以突出显示匹配的HTML标记(例如Notepad ++)吗?


181

VIM支持匹配大括号,括号和方括号。这对于编辑C风格的语言(例如PHP和Javascript)非常有用。但是匹配HTML标签呢?

自从我一直在使用Notepad ++以来,就一直使用它。能够发现HTML块的开始和结束位置非常有用。我正在寻找的是类似于vim的东西(请参见绿色div标签):

(一个附加功能:突出显示未关闭的HTML标签,如此屏幕截图中的红色标签)。

matchit已被提议作为下一个最佳选择,但它需要额外的按键才能使用其功能。我希望无需额外的按键就可以看到HTML块的开始和结束位置。

我已经在互联网上拖网寻找Vim这样的东西。显然,根据另外2个StackOverflow 问题nabble,我并不是唯一的一个。

我几乎已经辞职了,以至于vim无法在视觉上匹配html标签。vim是否可以这样做?

附录:如果当前无法使用任何现有插件执行此操作,那么那里的任何vimscript向导是否都包含有关如何编写合适插件的指针?


您能以什么方式解释此功能“非常有用”吗?我真的不需要每时每刻都了解所有内容。当我需要了解一些信息时,Vim的设计使通过很少的击键就可以容易地知道。
romainl 2011年

17
尽管我不需要一无所知,但是能够轻松知道HTML标记何时结束可以让我了解正在使用的文件的结构。我还处理了很多写得不好的代码,因此有时我会遇到一个没有结束标记的html标记,该标记始终需要修复。
linqq 2011年

5
@romainl我经常阅读您的答案,我真的很喜欢您的观点。但是这次我不得不不同意。我可以认为此功能不是必需的,但我发现这是一个非常不错的问题。我发现奇怪的是,没有一种简单的方法可以通过Vim获得它。
lucapette

1
@lucapette,谢谢。实际上,我也喜欢这个问题。我从未使用过这种功能,也从未感到过对此功能的需求。但这可能是您一旦尝试就无法生存的事情之一。我喜欢我的工作流和工作区干净整洁,没有“管理碎片”,而且我认为这样的功能可能是多余的。插件的理想人选。可能有人会尝试以火柴为灵感。
romainl

Answers:


219

我今天必须使用一些HTML,所以我想解决这个问题。在vim.org中添加了一个ftplugin,它可以解决您的问题。

您可以在vim.org上找到它

您可以在github上获得它

希望对你有效。如果您有任何问题,请告诉我。


1
谢谢!这正是我要寻找的功能。如果您想解决它们,则只有两个较小的问题:1.当前,仅匹配相反的标签。是否也可以匹配光标所在的标签?2.当前,如果html标记具有属性,则也会选择这些属性。是否只能选择标签名称而没有属性?
linqq 2011年

好建议。在vm.org上的v1.2中应该同时照顾它们。匹配的正则表达式现在更加复杂,因此,如果您发现任何错误,请告诉我。
格雷格·塞克斯顿,

1
根据要求,我已将此ftplugin添加到github。请参阅我更新的答案以获取链接。
格雷格·塞克斯顿,

1
@GregSexton,您现在已经正式成为英雄;)
lucapette 2011年

7
刚发现它,看起来不错,但是请注意,我必须在〜/ .vimrc中添加“ filetype plugin on”才能将其打开。如果将插件放置在ftplugin文件夹中后仍无法正常工作,请将以上内容添加到〜/ .vimrc中,然后便已准备就绪。
杰夫

95

Greg的MatchTag.vim插件很棒,但是我想要更多。我希望包围标签始终高亮显示,而不仅仅是光标在标签之一上时。

因此,我写了MatchTagAlways,它可以完成Greg的MatchTag所做的所有事情,并且无论光标在代码中的什么位置,都始终突出显示封闭的标签。它还可以与未封闭的标签和HTML模板语言(例如Jinja或Handlebars)一起使用。

这是GIF实际运作情况:

行动中的MTA


4
很酷的解决方案-我可能会使用原始版本,但是我可以看到它的帮助。我希望有GIF演示的更多答案,这太棒了!
杰森

3
完全同意Jason,+ 1是令人惊叹的GIF骇客。
Dan Bechard 2014年

这比接受的答案更好。但是我仍然不确定如何验证超出垂直屏幕高度的标签。我无法在vim中将屏幕移过光标,并且分割屏幕在两个窗口中均未显示活动标签。
radix07

1
绝对的传奇,从此我的生活变得更加美好... <3
卡尔·格拉泽

1
这比赏金答案要好得多
MohitC '16

-2

我来这里是为了在Vim中寻找匹配的html样式尖括号。这似乎可行:

:set mps+=<:>
:help matchpairs

7
这种方法不是解决方案,它只是让'<'匹配为'>'
Daniel YC Lin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.