使用vim删除div中的新行

时间:2012-05-26 11:43:29

标签: vim macvim

我有一些像这样的数据

<div>
This
is
some text
</div>

我希望最终得到这个

<div>
This is some text
</div>

我知道我可以搜索和替换\n,但我想限制只搜索<div>标记内的行。

我有一个非常长的HTML文件,包含数千个Div,没有类或ID。

我怎么能用Vim做到这一点?

5 个答案:

答案 0 :(得分:4)

将光标移动到<div>块,试试这个:

v 0 Ĵ Ĵ


要加入所有非重叠<div>块,请尝试以下操作:

:g/<div>/+1,/<\/div>/-1 join

答案 1 :(得分:2)

  1. 开始使用d
  2. 录制宏(在注册qd中)
  3. 使用/<div搜索开场DIV代码(然后按返回)
  4. 使用可视模式使用vit
  5. 选择DIV内的所有内容
  6. 更改视觉选择,使其不包含带有oj
  7. 的开场标记的行
  8. 使用J
  9. 加入这些行
  10. 使用q
  11. 停止录制

    现在,您可以根据需要使用@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>