在 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
我发现自己在 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