Przenoszenie kolumn tabeli HTML w vimie

0

Mam tabelę HTML z takimi wierszami:

<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 ...

Chciałbym przesunąć wszystkie wpisy w kolumnie OPIS w dół. Więc chciałbym przejść o foo1jeden krok w dół, chciałbym przejść o foo2jeden krok w dół itp. Ale chciałbym zachować wszystko inne w tabeli. Jak mogę to zrobić w vimie?

Kevin H. Lin
źródło

Odpowiedzi:

1

Rozumiem, że chcesz, aby stół wyglądał tak, z dziwną pustą komórką pod 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>

Czy mam rację? Oto jeden ze sposobów, w jaki możesz to zrobić:

  1. Sformatuj ten kod za :%!column -tpomocą wtyczki Vim lub:

    <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. Przejdź do pierwszego elementu, a następnie usuń go za pomocą dit. foo1jest teraz w rejestrze domyślnym.

  3. Rozpocznij makro za pomocą qx(użyj dowolnej dostępnej litery zamiast x).

  4. Przejdź do linii poniżej za pomocą j.

  5. Wybierz wizualnie zawartość znacznika za pomocą vit.

  6. Zamień zaznaczony tekst ( foo2) na zawartość rejestru domyślnego ( foo1) za pomocą p.

  7. Zatrzymaj makro za pomocą q. Zawartość rejestru domyślnego jest teraz foo2gotowa do użycia przy następnym wywołaniu makra.

  8. Zastosuj makro tyle razy, ile potrzebujesz za pomocą czegoś takiego <number of rows>@x.

Wynik końcowy:

<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>

Wersja skrócona:

:%!column -t<CR>
(movement)
ditqxjvitpq
17@x

Użyj innego rejestru nazwanego w kroku 2, jeśli nie chcesz zadzierać z rejestrem domyślnym (i schowkiem systemowym, jeśli dotyczy).

Jeśli chcesz tylko zwiększyć liczbę foo2i Co, wtyczka VisIncr jest bardzo dobra.

romainl
źródło