在Vim中,我如何快速找到闭合的HTML标签?

21
就像编辑C源文件一样,我可以按下%来获取当前光标所在位置的闭合}
当我编辑HTML文件时,我该如何做到这一点?有没有快捷键?
明确一点,我想要的是:
<html>
</html>

当光标移动到<html>时,我想按下一个键,使光标跳到</html>

可能是在Vim中跳转到匹配的XML标签的重复问题。 - kenorb
5个回答

27
您可以使用视觉操作符在标签之间跳转,例如:
  1. 将光标放在标签上。
  2. 按下 v 进入视觉模式。
  3. 通过按下 a+ti+t 选择外部标签块或内部标签块。
您的光标应该会跳到匹配的闭合 html/xml 标记处。要从结束标记向后跳转,请按下 oO 跳转至相反的标记。
现在,您可以通过按下 Esc 来退出视觉模式,通过 c 来更改它,或通过 y 来复制它。
要将该操作记录到寄存器中,请按下 qq 开始录制,执行如上的标记跳转(包括 Esc),按下 q 完成。然后,按下 @q 调用跳转。
请参阅 :help visual-operators:help v_it 以获取更多帮助:

at 带有标记的 <tag> </tag>

it 内部的 <tag> </tag>


或者,使用插件,例如 matchit.vim(请参阅:在没有花括号的语言中使用 %)。
还请参阅:

1
太棒了。我一直在寻找一些能够解析HTML并查找开始和结束标记的工具,但是找不到任何有用的东西。HTML在大多数情况下都是一团糟。最糟糕的标记语言,没有哪种标记语言是好的。这个工具很有效,谢谢。 - MagicLAMP
非常感谢您分享这个技巧:按下“%”键,光标会跳转到相应的 HTML/XML 结束标签。如果需要向后跳转,可以按下“o”或“O”键来跳转到相反的标签。以前从未了解过这个功能,感谢您的分享。 - tw0shoes

15

4
如果我没记错的话,matchit插件已经包含在vim的发行版中了,所以这个链接与此无关。要安装它,请看:h matchit-install(但我建议您将所有的cp命令替换为ln -s,这样每次更新matchit时就不需要重新复制它了)。 - ZyX
1
取决于您的发行版。看起来来自 portableapps.com 的 gvimportable 没有包含它。我可能错了,希望如此。 - Benoit

6

我过去在使用matchit插件时遇到了这个问题。我解决它的方式是修改xml类型文件中的b:match_words。以下是我.vimrc文件中的相关部分:

  autocmd FileType html let b:match_words = '<\(\w\w*\):</\1,{:}'
  autocmd FileType xhtml let b:match_words = '<\(\w\w*\):</\1,{:}'
  autocmd FileType xml let b:match_words = '<\(\w\w*\):</\1,{:}'

试一下,看它是否有帮助。


你可能在你的.vimrc文件中有这样一行代码::let loaded_matchit = 1。我在没有仔细阅读文档的情况下将其添加到了开头,这导致我花费了很多时间来调试这个错误。 - Frank Cheng
在我的情况下,我没有这行代码,但感谢你的提示。 - Nick Knowlson

0

0

我无法让上述内容正常工作,所以这是我在我的.vimrc中尝试的 :)

imap <expr> > getline('.')[col('.')-2] !~# '\s' ? '><Esc>bvwy/><CR>a</<Esc>p<Esc>bba' : '>'

这是一个条件映射,如果在>之前有字符,则忽略html扩展(例如:if foo > 3将被忽略)

我喜欢这个映射的原因是它与文件类型无关(这在编写js文件中的html时非常方便)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接