Ich habe eine HTML-Tabelle mit Zeilen wie diesen:
<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 ...
Ich möchte alle Einträge in der Spalte „BESCHREIBUNG“ nach unten verschieben. Ich möchte also foo1
einen Schritt nach unten gehen, ich möchte foo2
einen Schritt nach unten gehen usw. Aber ich möchte alles andere in der Tabelle beibehalten. Wie kann ich das in vim tun?
Antwort1
So wie ich es verstehe, möchten Sie, dass die Tabelle so aussieht, mit einer merkwürdigen leeren Zelle darunter 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>
…
Habe ich recht? Hier isteinsSo können Sie es machen:
Formatieren Sie diesen Code mit
:%!column -t
oder einem Vim-Plugin:<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>
Zum ersten Element wechseln und es dann mit löschen
dit
.foo1
befindet sich jetzt im Standardregister.Starten Sie ein Makro mit
qx
(verwenden Sie anstelle von einen beliebigen verfügbaren Buchstabenx
).Wechseln Sie mit zur Zeile darunter
j
.Wählen Sie den Inhalt des Tags visuell mit aus
vit
.Ersetzen Sie den ausgewählten Text (
foo2
) mithilfe von durch den Inhalt des Standardregisters (foo1
)p
.Stoppen Sie das Makro mit
q
. Der Inhalt des Standardregisters ist jetztfoo2
, und kann beim nächsten Aufruf des Makros verwendet werden.Wenden Sie das Makro so oft wie nötig an, beispielsweise mit
<number of rows>@x
.
Endresultat:
<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>
…
Kurzfassung:
:%!column -t<CR>
(movement)
ditqxjvitpq
17@x
Verwenden Sie in Schritt 2 ein anderes benanntes Register, wenn Sie das Standardregister (und ggf. Ihre Systemzwischenablage) nicht ändern möchten.
foo2
Wenn Sie nur die Zahl in und Co erhöhen möchten ,VisIncr-Pluginist sehr gut.