我有一些像这样的数据
<div>
This
is
some text
</div>
我希望最终得到这个
<div>
This is some text
</div>
我知道我可以搜索和替换\n
,但我想限制只搜索<div>
标记内的行。
我有一个非常长的HTML文件,包含数千个Div,没有类或ID。
我怎么能用Vim做到这一点?
答案 0 :(得分:4)
将光标移动到<div>
块,试试这个:
v 我 吨 0 Ĵ Ĵ
要加入所有非重叠<div>
块,请尝试以下操作:
:g/<div>/+1,/<\/div>/-1 join
答案 1 :(得分:2)
d
qd
中)
/<div
搜索开场DIV代码(然后按返回)vit
oj
J
q
现在,您可以根据需要使用@d
多次播放宏(或者,对于固定数量的重复,您可以在其前面添加一个数字,例如20@d
)
(这个解决方案假定,在你的例子中,open和close标签总是在它们自己的行上。而且,如果DIV中只有一行内容,那么结束标签将在同一行上结束作为内容。)
答案 2 :(得分:0)
如果你在“这个”,VjjJ
(选择整行,向下两次,用''作为分隔符连接行。)
-
如果您希望最终结果为<div>This is some text</div>
:将光标放在标记中的任意位置并执行vatJ
(可视模式,选择包含,选择标记,连接行。)
答案 3 :(得分:0)
您可以执行以下操作之一:
V
选择树线,并使用J
将它们放在同一行。 3J
。J
两次。 答案 4 :(得分:0)
: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>