У меня есть 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
один шаг вниз, я хотел бы сместиться на 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>
…
Я прав? Вотодинкак это можно сделать:
Отформатируйте этот код с помощью
:%!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очень хорошо.