У меня есть 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 ...

Я хотел бы переместить все записи в столбце ОПИСАНИЕ вниз. Поэтому я хотел бы переместить foo1 один шаг вниз, я хотел бы переместить foo2 один шаг вниз и т.д. Но я бы хотел сохранить все остальное в таблице. Как я могу сделать это в VIM?

1 ответ1

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>
    
  2. Перейти к первому элементу, затем удалить его с помощью dit . foo1 теперь в регистре по умолчанию.

  3. Начните макрос с qx (используйте любую доступную букву вместо x).

  4. Перейти к строке ниже с помощью j .

  5. Визуально выберите содержимое тега с помощью vit .

  6. Замените выделенный текст (foo2) содержимым регистра по умолчанию (foo1), используя p .

  7. Остановите макрос с помощью q . Содержимое регистра по умолчанию теперь foo2 , готовое к использованию при следующем вызове макроса.

  8. Примените макрос столько раз, сколько вам нужно, используя что-то вроде <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 очень хорош.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .