我有一些这样的数据
<div>
This
is
some text
</div>
我想结束这个
<div>
This is some text
</div>
我知道我可以搜索和替换\n
,但我想限制只搜索<div>
标签内的行。
我有一个非常长的 HTML 文件,其中包含数千个 Div,没有类或 ID。
我怎样才能用 Vim 做到这一点?
将光标移动到<div>
块中,试试这个:
vitojJ
要加入所有非重叠<div>
块,请尝试以下操作:
:g/<div>/+1,/<\/div>/-1 join
d
)qd
/<div
使用(然后按回车键)搜索开始的 DIV 标记vit
oj
J
q
现在您可以根据需要多次播放宏@d
(或者,对于固定次数的重复,您可以在其前面加上一个数字,例如20@d
)
(此解决方案假定,如您的示例所示,打开和关闭标签始终位于各自的行中。此外,如果 DIV 中只有一行内容,则结束标签将与内容位于同一行.)
如果您在“This”上,VjjJ
(选择整行,向下两次,以 ' ' 作为分隔符连接行。)
--
如果您希望最终结果是<div>This is some text</div>
:将光标放在标签中的任意位置并执行vatJ
(可视模式,选择包含,选择标签,连接行。)
您可以执行以下操作之一:
V
,并使用J
将它们放在同一行。3J
.J
两次。:g/<div>/norm! jVjjJ
:................... command
g................... global
/<div> ............. search for <div>
norm! .............. in normal mode
j................... down one line 'j',
V .................. visual by line 'V'
jj ................. down more two lines
J .................. upper 'J' join lines
对于可变数量的行尝试
:g/<div>/norm! jV/\/div^MkJ
:............. command
g ............ global
/<div> ....... search div
norm! ....... execute in normal mode
j ............ down one line
V ............ start visual mode
/\/div ....... search div close
^M ........... type <ctrl-v> in linux or <ctrl-k> on windows, after that <enter>
k ............ up one line
J ............ joine all selected lines
On linux to insert <Enter> press <ctrl-v><enter>
On windows try <ctrl-k><enter>