次のような行を持つ HTML テーブルがあります。
<tr> <td>DATE</td> <td>NUMBER</td> <td>DESCRIPTION</td> <td>DEADLINE</td> </tr>
<tr> <td>6/7</td> <td>1</td> <td>foo1</td> <td>bar1</td> </tr>
<tr> <td>6/15</td> <td>2</td> <td>foo2</td> <td>bar2</td> </tr>
<tr> <td>6/20</td> <td>3</td> <td>foo3</td> <td>bar3</td> </tr>
... etc ...
私がやりたいのは、DESCRIPTION 列のすべてのエントリを下に移動することです。つまり、foo1
1 ステップ下に移動、1 ステップ下に移動foo2
、などしたいのですが、テーブル内の他のすべては保持したいと思います。これを vim でどのように実行できますか?
答え1
私が理解しているのは、テーブルを次のように表示し、その下に奇妙な空のセルを配置したいということですDESCRIPTION
。
<tr> <td>DATE</td> <td>NUMBER</td> <td>DESCRIPTION</td> <td>DEADLINE</td> </tr>
<tr> <td>6/7</td> <td>1</td> <td></td> <td>bar1</td> </tr>
<tr> <td>6/15</td> <td>2</td> <td>foo1</td> <td>bar2</td> </tr>
<tr> <td>6/20</td> <td>3</td> <td>foo2</td> <td>bar3</td> </tr>
…
そうですか?ここに1つこれを行う方法:
このコードを
:%!column -t
Vim プラグインでフォーマットします:<tr> <td>DATE</td> <td>NUMBER</td> <td>DESCRIPTION</td> <td>DEADLINE</td> </tr> <tr> <td>6/7</td> <td>1</td> <td>foo1</td> <td>bar1</td> </tr> <tr> <td>6/15</td> <td>2</td> <td>foo2</td> <td>bar2</td> </tr> <tr> <td>6/20</td> <td>3</td> <td>foo3</td> <td>bar3</td> </tr>
dit
最初の項目に移動して、 .を使用して削除すると、foo1
デフォルト レジスタに設定されます。マクロを で開始します
qx
( の代わりに使用可能な任意の文字を使用しますx
)。で下の行に移動します
j
。を使用してタグの内容を視覚的に選択します
vit
。を使用して、選択したテキスト ( ) をデフォルト レジスタ ( )
foo2
の内容に置き換えます。foo1
p
でマクロを停止します
q
。デフォルト レジスタの内容は になりfoo2
、次回マクロが呼び出されたときに使用できるようになります。のようにして、必要な回数だけマクロを適用します
<number of rows>@x
。
最終結果:
<tr> <td>DATE</td> <td>NUMBER</td> <td>DESCRIPTION</td> <td>DEADLINE</td> </tr>
<tr> <td>6/7</td> <td>1</td> <td></td> <td>bar1</td> </tr>
<tr> <td>6/15</td> <td>2</td> <td>foo1</td> <td>bar2</td> </tr>
<tr> <td>6/20</td> <td>3</td> <td>foo2</td> <td>bar3</td> </tr>
…
要約版:
:%!column -t<CR>
(movement)
ditqxjvitpq
17@x
デフォルトのレジスタ (および該当する場合はシステム クリップボード) を変更したくない場合は、手順 2 で別の名前付きレジスタを使用します。
foo2
とCoの数値のみを増やしたい場合は、VisIncrプラグインとても良い。