在Vim中真正选择HTML标签

4

在一个HTML文档中,假设我有这样的内容:

<p>
  fdhjfkdj hfkjdfhkjdfhkjdh dfhdkf kjdh kjdhkjdhk 
  fhkdj hdjfhjkdh kjdh kjdf jkdhf d
  jfdfhkdjfhkjdf 
  fjdj fhkd fdhfkjd hfkjdfhkjdf kdhfd 
  fdhjkfjk dhjdfhkjdf kjdfhdk fhdk 
</p>

如果我在vim中执行普通的vit命令,它将选择其中的文本,如果我复制它,但是如果我尝试进行任何操作,例如制表符或运行gq,它会影响整个<p>。例如,执行vit然后gq最终看起来像这样:

    <p> fdhjfkdj hfkjdfhkjdfhkjdh dfhdkf kjdh kjdhkjdhk  lkd sldj lks jlkdf
jlsdkf jlsdf jdl dlsjl fhkdj hdjfhjkdh kjdh kjdf jkdhf d jfdfhkdjfhkjdf fjdj
fhkd fdhfkjd hfkjdfhkjdf kdhfd fdhjkfjk dhjdfhkjdf kjdfhdk fhdk </p>

缩进不会缩进文本,而是整个标签。我该如何真正选择其中的文本,以便可以像上面那些命令一样运行它?

1个回答

3

这是因为段落的内部HTML直接在起始<p>标签之后开始,所以它包含紧接其后的换行符(你在vit后面也能看到)。正如你已经意识到的那样,重新格式化和缩进是基于行的,因此单个字符很重要。

为了使文本对象按照您的要求工作,您需要移动到选择的开头(o),然后将其减少到下一行(使用j最容易;对于缩进和格式化,确切的起始列并不重要)。因此,重新格式化的序列将是:

vitojgq

如果您想要更快的速度,就需要编写自己的文本对象。可以参考我的CountJump插件textobj-user插件,它们都可以用于定义文本对象。


实际序列有点长:vitkojgq,但在你解释之前我不认为这会“点击”我的脑海。谢谢!也许我可以把它变成某种快捷方式。 - Oscar Godson
正确,除非结束标签从第一列开始,就像你的例子一样! - Ingo Karkat

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