このようなデータがあります
<div>
This
is
some text
</div>
そしてこれで終わりにしたい
<div>
This is some text
</div>
を検索して置換できることはわかっていますが、その検索をタグ\n
内の行のみに制限したいと考えています。<div>
何千もの Div があり、クラスや ID がない非常に長い HTML ファイルがあります。
Vimでこれを行うにはどうすればよいですか?
カーソルを<div>
ブロックに移動して、これを試してください:
vitojJ
重複していないすべての<div>
ブロックを結合するには、次のようにします。
:g/<div>/+1,/<\/div>/-1 join
d
)qd
/<div
(その後、Return キーを押します)。vit
oj
J
q
これで、必要な回数だけマクロを再生できます@d
(または、固定回数の繰り返しの場合は、前に数字を付けることもできます20@d
) 。
(このソリューションは、あなたの例のように、開始タグと終了タグが常に独自の行にあることを前提としています。また、DIV にコンテンツが 1 行しかない場合、終了タグはコンテンツと同じ行になります。 .)
: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>
"This" を使用している場合VjjJ
(行全体を選択し、2 回下に移動し、区切り文字として ' ' を使用して行を結合します。)
--
最終結果を次のようにしたい場合<div>This is some text</div>
:タグ内の任意の場所にカーソルを置き、実行しますvatJ
(ビジュアルモード、包含を選択、タグを選択、行を結合)。
次のいずれかを実行できます。
V
、J
で同じ列に並べます。3J
。J
2 回実行します。