在 neovim 中更改 HTML 属性

Change HTML attribute in neovim

我发现自己在 HTML 标签内快速更改属性时遇到困难。

比如我有下面的代码

<div className="expense-date">
  <div className="expense-date__@@@year">{year}</div>
  <div>{month}</div>
  <div>{day}</div>
</div>

我的光标在 @@@ 所在的位置,我想删除整个属性:className="expense-date__@@@year"

有没有我可以用来快速删除它的文本对象?目前我使用 T ct>(或 T ct ,如果有另一个属性),但这显然不够好,如果属性值中有 space 则不起作用。

据我所知,没有简单的方法可以做到这一点;除非您执行深入的语法分析,否则总会有一些注意事项。

但是您可以改进您的技术,例如 F"F=bF d2f"

  • F" 转到字符串的开头;
  • F= 转到前一个 = 符号,跳过最终的 spaces;
  • b 转到属性名称(最终在它的中间,例如 data-my-attr),跳过最终的 spaces;
  • F 到属性名前的第1个space;
  • d2f"(或c2f")执行作业。

当然,您可以将其作为宏与q@一起使用,以简化其使用。

没有内置的“属性”文本对象,但您可以近似一个具有如下通用内容的对象:

va"oB

其中:

  • va"选择值,
  • o将光标移动到选区的另一边,
  • B 将选择范围扩展到属性的开头。

这可以变成快速而肮脏的伪文本对象:

xnoremap ix a"oB
onoremap ix :<C-u>normal vix<CR>
xnoremap ax a"oBh
onoremap ax :<C-u>normal vax<CR>
  • 覆盖所需文本的视觉模式映射,
  • 一个使用可视模式的运算符挂起模式映射,

这样使用:

yix
dax
vix
cax
…

请参阅 this plugin 以获得更智能的实施方式。


请注意,此答案中的任何内容都不能保证在 Neovim 中正常工作。

还有一个选项:

vi>   ........ visual select inner <>
o ............ jump to the other side
w ............ jump to the next word