2

我有一些这样的数据

<div>
This
is
some text
</div>

我想结束这个

<div>
This is some text
</div>

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

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

我怎样才能用 Vim 做到这一点?

4

5 回答 5

4

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

vitojJ


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

:g/<div>/+1,/<\/div>/-1 join
于 2012-05-26T12:15:04.993 回答
2
  1. 开始录制宏(在寄存器中dqd
  2. /<div使用(然后按回车键)搜索开始的 DIV 标记
  3. 使用可视模式选择 DIV 内的所有内容vit
  4. 更改视觉选择,使其不包含带有开始标记的行oj
  5. 加入行J
  6. 停止录制q

现在您可以根据需要多次播放宏@d(或者,对于固定次数的重复,您可以在其前面加上一个数字,例如20@d

(此解决方案假定,如您的示例所示,打开和关闭标签始终位于各自的行中。此外,如果 DIV 中只有一行内容,则结束标签将与内容位于同一行.)

于 2012-05-26T12:05:01.097 回答
0

如果您在“This”上,VjjJ(选择整行,向下两次,以 ' ' 作为分隔符连接行。)

--

如果您希望最终结果是<div>This is some text</div>:将光标放在标签中的任意位置并执行vatJ(可视模式,选择包含,选择标签,连接行。)

于 2012-05-26T11:49:26.557 回答
0

您可以执行以下操作之一:

  • 用 选择树线V,并使用J将它们放在同一行。
  • 将光标放在第二行并使用3J.
  • 将光标放在第二行,然后执行J两次。
于 2012-05-26T11:52:30.740 回答
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>
于 2012-05-26T18:44:59.527 回答