2

このようなデータがあります

<div>
This
is
some text
</div>

そしてこれで終わりにしたい

<div>
This is some text
</div>

を検索して置換できることはわかっていますが、その検索をタグ\n内の行のみに制限したいと考えています。<div>

何千もの Div があり、クラスや ID がない非常に長い HTML ファイルがあります。

Vimでこれを行うにはどうすればよいですか?

4

5 に答える 5

4

カーソルを<div>ブロックに移動して、これを試してください:

vitojJ


重複していないすべての<div>ブロックを結合するには、次のようにします。

:g/<div>/+1,/<\/div>/-1 join
于 2012-05-26T12:15:04.993 に答える
2
  1. でマクロの記録を開始します ( register 内d)qd
  2. 開始 DIV タグを検索します/<div(その後、Return キーを押します)。
  3. ビジュアル モードを使用して、DIV 内のすべてを選択します。vit
  4. の開始タグのある行が含まれないように視覚的な選択を変更しますoj
  5. 行を結合しますJ
  6. で録音を停止q

これで、必要な回数だけマクロを再生できます@d(または、固定回数の繰り返しの場合は、前に数字を付けることもできます20@d) 。

(このソリューションは、あなたの例のように、開始タグと終了タグが常に独自の行にあることを前提としています。また、DIV にコンテンツが 1 行しかない場合、終了タグはコンテンツと同じ行になります。 .)

于 2012-05-26T12:05:01.097 に答える
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 に答える
0

"This" を使用している場合VjjJ(行全体を選択し、2 回下に移動し、区切り文字として ' ' を使用して行を結合します。)

--

最終結果を次のようにしたい場合<div>This is some text</div>:タグ内の任意の場所にカーソルを置き、実行しますvatJ(ビジュアルモード、包含を選択、タグを選択、行を結合)。

于 2012-05-26T11:49:26.557 に答える
0

次のいずれかを実行できます。

  • で樹木の列を選択しVJで同じ列に並べます。
  • カーソルを 2 行目に置き、 を使用します3J
  • カーソルを 2 行目に置き、J2 回実行します。
于 2012-05-26T11:52:30.740 に答える