如何在VIM中注释掉HTML/XML元素?

12

有哪些最佳快捷方式或插件可以注释HTML / XML元素?

还需要取消注释。

4个回答

8

您可以使用匹配的XML标签的组合,就像在这个问题和Perl的搜索和替换中所看到的一样。

例如,给定以下代码片段:

<TypeDef name="a">
  <ArrayType high="14" low="0">
    <UndefType type="node">
    </UndefType>
  </ArrayType>
</TypeDef>

将光标放在开头或结尾的 TypeDef 上,然后输入以下序列:

vat:s/^\(.*\)$/<!-- \1 -->/
  1. v - 进入可视模式
  2. at - 选择整个XML标签
  3. :s/^\(.*\)$/<!-- \1 -->/ - 将每行用'<!-- ... -->'括起来,这是XML的注释分隔符

或者,您也可以像这样删除它:

dat
  1. d - 根据以下动作删除
  2. at - 如之前所述

要删除 id,请使用 d 然后使用 vat:s/-->// 删除注释。


如果有人想知道,您还需要执行vat:s/<!--//以删除每行注释的开头,或使用Ctrl+v在可视化中选择它并使用x删除它们。对于提到的所有命令,您还可以将“:”后面的内容复制到剪贴板中,并使用Ctrl+r +或Ctrl+r *在命令模式下粘贴。 - DystD
另外,执行 :nohl 命令可以清除高亮(或者可以通过将 :let @/ = ""<CR> 映射到某个键位来实现,参考 https://dev59.com/3HRB5IYBdhLWcg3wV116)。 - DystD
另一种取消注释的方法(修改自vi.stackexchange.com/a/17777/31302):vat:norm!05x$4X - DystD

6
我使用tComment插件。你可以在这里找到一个详细的视频教程,了解如何安装和使用它。
该插件非常有用,因为它允许您从命令和输入界面切换评论,并且您可以使用视觉模式和动作(如gcwgc3w)。

谢谢,我试用了tComment,并且非常满意。请参考http://net.tutsplus.com/tutorials/other/vim-essential-plugin-tcomment/开始使用。 - justin

2
如果您使用的是 emmet-vim,您可以通过按下 v a t 然后按下 Ctrl y / 来选择要注释掉的标签的整个内容。

0

评论代码:vato<ESC>i<!-- <ESC>vatA --><ESC>

  1. 将光标放在 HTML 代码块内的任何位置。不要放在嵌套的代码块内,除非您想评论该代码块。
  2. 转到开标签vato
  3. 退出可视模式:Esc
  4. 插入:i<!--
  5. 退出插入模式:Esc
  6. 转到闭合标签:vat
  7. 追加:A -->
  8. 退出插入模式:Esc

注意:您可以使用 I 直接从可视模式插入,它适用于多行代码块,但对于单行元素,它会搞乱缩进。


取消注释:vat<ESC>4xvato<Esc>5X

  1. 将光标放在HTML块内的任何位置,但不包括结束注释分隔符。
  2. 移到闭合标记:vat
  3. 退出可视模式:Esc
  4. 删除4个字符:4x
  5. 移到开放标记vato
  6. 删除前面的5个字符:5X

使用 .vimrc 或 init.vim 创建快捷方式

您可以将以下行添加到您的 .vimrc(或 neovim 中的 init.vim)中,以重新映射快捷键:

" Comment HTML element
nnoremap <silent> <leader>h :set lazyredraw<cr>mhvato<ESC>i<!-- <ESC>vatA --><ESC>`h:set nolazyredraw<cr>

" Uncomment HTML element
nnoremap <silent> <leader>H :set lazyredraw<cr>mhvat<ESC>4xvato<ESC>5X`h:set nolazyredraw<cr>

警告:

  • 如果您尝试取消注释非注释区域,则需要撤消。这将删除一些字符。您可以通过将4x替换为d2f-5X替换为dF!来避免此问题,但是您会遇到this kind of workaround和同一行中包含-...-或!的其他任何内容的问题。
  • 如果元素标记之间已经有注释,则需要先取消注释这些注释。

注:

  • 更改 <leader>h<leader>H 为您想要使用的内容。
  • :set lazyredraw 是为了通过不重新绘制屏幕来隐藏中间步骤:set nolazyredraw 是为了避免可能出现的视觉故障。
  • mh 是为了保存当前光标位置`h 是为了跳回到该行和列。您可以将 h 替换为任何其他小写字母

提示:使用 :$MYVIMRC 源 应用对 .vimrc(或 init.vim)所做的更改,而无需重新启动 vim。


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