ChatGPT解决这个技术问题 Extra ChatGPT

Vim 可以突出显示匹配的 HTML 标签,如 Notepad++ 吗?

Vim 支持匹配成对的花括号、圆括号和方括号。这非常适合编辑 PHP 和 JavaScript 等 C 风格的语言。但是匹配 HTML 标签呢?

只要我一直在使用 Notepad++,它就一直具有此功能。能够发现 HTML 块的开始和结束位置非常有用。我正在寻找类似 Vim 的东西(见绿色 div 标签):

https://i.stack.imgur.com/swLB4.png

一个额外的功能:突出显示未关闭的 HTML 标签,如上面屏幕截图中的红色标签。

matchit 已被提议为次优,但它需要额外的按键才能使用其功能。我希望能够在没有额外按键的情况下查看 HTML 块的开始和结束位置。

我已经在互联网上搜索了类似 Vim 的东西。显然,根据 two other StackOverflow 问题和 Nabble thread,我不是唯一一个。

我几乎让自己对 Vim 无法在视觉上匹配 HTML 标记感到厌烦。 Vim 有可能做到这一点吗?

附录:如果目前无法使用任何现有插件执行此操作,是否有任何 Vimscript 向导对如何编写合适的插件有任何指示?

你能解释一下这个功能“非常有用”的方式吗?我真的不需要每时每刻都知道一切。当我需要知道一些事情时,Vim 的设计目的是让我只需要很少的按键就可以很容易地知道。
虽然我不需要知道所有内容,但能够轻松知道 HTML 标记何时结束让我能够了解我正在使用的文件的结构。我还处理了很多写得不好的代码,所以有时我会遇到一个没有结束标签的html标签,总是需要修复。
@romainl 我经常阅读您的答案,我真的很喜欢您的观点。但这一次我不得不不同意。我可以认为此功能不是必需的,但我发现这是一个非常好的问题。我觉得很奇怪,没有一种简单的方法可以用 Vim 获得它。
@lucapette,谢谢。事实上,我也喜欢这个问题。我从未使用过这样的功能,也从未觉得需要它。但这可能是您一旦尝试就离不开的东西之一。我喜欢我的工作流程和工作空间干净而专注,没有“行政碎片”,我认为这样的功能可能是多余的。插件的完美候选人。人们可能会尝试从 matchit 中获取灵感作为起点。
你看过这个答案吗? stackoverflow.com/questions/1957083/…

G
Greg Sexton

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

You can get it here on vim.org

You can get it here on github

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


谢谢!这正是我正在寻找的功能。只有两个小问题,如果您想修复它们: 1. 目前,只有相反的标签匹配。是否也可以匹配光标所在的标签? 2. 目前,如果一个html标签有属性,那些也是被选中的。是否可以只选择标签名称而不选择属性?
好的建议。他们都应该在 vim.org 上的 v1.2 中得到照顾。匹配的正则表达式现在更加复杂,所以如果您发现任何错误,请告诉我。
根据要求,我已将此 ftplugin 添加到 github。请参阅我的更新答案以获取链接。
@GregSexton 你现在正式成为英雄了;)
刚找到这个,看起来不错,但请注意,我必须在 ~/.vimrc 中添加“filetype plugin on”才能打开它。如果在您将插件放入您的 ftplugin 文件夹后它不起作用,请将以上内容添加到您的 ~/.vimrc 中,您应该已经设置好了。
L
Lekensteyn

Greg 的 MatchTag.vim 插件很棒,但我想要更多。我希望始终突出显示封闭标签,而不仅仅是当光标位于其中一个标签上时。

所以我写了 MatchTagAlways,它完成了 Greg 的 MatchTag 所做的所有事情,并且始终突出显示封闭标记,无论光标在代码中的哪个位置。它还适用于非封闭标签和 HTML 模板语言,如 Jinja 或 Handlebars。

这是一个 GIF 显示它的实际效果:

https://i.imgur.com/qAf0N.gif


很酷的解决方案 - 我可能会使用原始版本,但我可以看到这是有帮助的。我希望更多答案有 GIF 演示,太棒了!
完全同意 Jason 的观点,为惊人的 GIF hack +1。
这比接受的答案更好。但我仍然不确定如何验证超出垂直屏幕高度的标签。我无法将屏幕移过 vim 中的光标,并且分屏不会在两个窗口中显示活动标签。
你绝对的传奇,我的生活从此变得更好...... <3
这比赏金答案好得多
C
Chris X

我来这里是为了在 Vim 中寻找匹配的 html 风格的尖括号。这似乎有效:

:set mps+=<:>
:help matchpairs

这种方法不是解决方案,它只是让'<'匹配'>'