要一次删除一个标签,您可以使用内置的a<
运动,该运动在尖括号分隔的区域上操作.标记上的两个da<
将分别删除开始标记和结束标记.
事实上,我会跳到"code",删除标签并重复:
/code<CR>da<n.
:substitute
命令不能按预期工作的原因是它在lines上工作,而不是在视觉 Select 上.您可以使用\%V
标记将其约束到可视区域,如下所示:
:s/\%V<[^>]*>//g
或(使用非贪婪匹配):
:s/\%V<.\{-}>//g
This will remove the <code>
and </code>
tags only but leave "ffmpeg" in the buffer.
See :help \%V
.
请注意,这将仅在当前行上操作,因此换行符可能会删除开始标记,但不会删除结束标记.
要同时删除标记和其中的任何内容,可以使用it
表示inner tag,使用at
表示a tag个运动.将光标放在<code>...</code>
上的任何位置并按dat
将删除开始和结束代码标签以及内部的任何内容.
有关详细信息,请参阅:help at
.文本对象(这些对象被称为文本对象)非常有用,它们都可以在:help text-objects
中找到.
这可以用来只删除标记,方法是拖动标记内的所有内容,删除所有内容并进行第一次 pull .将光标放在标记内,执行以下操作:
yitdat"0P
在这里,yit
在标记内部(隐式地指向寄存器0
),dat
删除标记和其中的所有内容,"0P
将寄存器0
的内容放在游标之前.最大的优势是,这也将在不同的领域发挥作用.
对于一次性标签删除,我会坚持使用da<
,如上所述.如果该问题经常出现,请考虑为上面的命令创建映射:
:nnoremap <buffer> <your key> yitdat"0P