有什么快速的方法可以在Vim中选择属性键值对(例如<input id =“ mytest” />中的id =“ mytest”)?

时间:2018-08-09 10:45:22

标签: vim

有什么方法可以选择标签的属性键值对? 例如,

<input id="test" type="text"/>

我只想选择 id =“ test” 进行快速编辑或删除,我该怎么做?

2 个答案:

答案 0 :(得分:2)

假设您位于该行的开头:

WviW
  • W跳到下一个单词
  • viW直观地选择当前单词

但是Vim中通常不需要视觉选择(这是其优势之一),因此您可以简单地这样做:

diW

删除当前WORD,或者:

ciW

进行更改,或者:

yiW

拉动它。

请参见:help W:help WORD:help operator:help iW

答案 1 :(得分:1)

使用

nnoremap <silent> µ @=search('id="', 'ze') > 0 ? 'lvi"<c-g>' : ''<cr>

您将最终进入Select-modeid标签的内容被选中。在选择模式下,可以很容易地删除(使用<del>键或替换(只需键入新内容)即可。如果您希望使用x简化删除操作,并且在替换之前不关心输入s,则可以使用可视模式。在这种情况下,请删除映射的<c-g>部分。

但是,它仅适用于双引号字符串。对于任何类型的字符串,您都需要提取使用的引号字符:

nnoremap <silent> µ @=search('id=[''"]', 'ze') > 0 ? 'lvi'.getline('.')[col('.')-1].'<c-g>' : ''<cr>

如果您希望能够继续跳跃,请对键绑定使用不可打印的字符,并为其他模式添加映射。

nnoremap <silent> <c-j> @=search('id=[''"]', 'ze') > 0 ? 'lvi'.getline('.')[col('.')-1].'<c-g>' : ''<cr>
" vmap will work in visual and in select mode; 
vmap     <silent> <c-j> <c-\><c-n><c-j>
" you may want to support the insert-mode as well
imap     <silent> <c-j> <c-\><c-n><c-j>

注意:我们不能使用:map-<expr>,因为它会阻止光标正确移动,因此使用@=