Movendo colunas da tabela html no vim

0

Eu tenho uma tabela HTML com linhas como esta:

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

O que eu gostaria de fazer é mudar todas as entradas da coluna DESCRIÇÃO para baixo. Então eu gostaria de mover foo1 um passo para baixo, eu gostaria de mover foo2 um passo para baixo, etc. Mas eu gostaria de preservar tudo o mais na tabela. Como posso fazer isso no vim?

    
por Kevin H. Lin 04.06.2012 / 21:14

1 resposta

1

O que eu entendo é que você quer que a tabela fique assim, com uma célula vazia estranha sob 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>
…

Estou certo? Aqui está uma maneira de fazer isso:

  1. Formate este código com :%!column -t ou um plugin 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. Mova para o primeiro item e exclua-o com dit . foo1 agora está no registro padrão.

  3. Inicie uma macro com qx (use qualquer letra disponível em vez de x ).

  4. Mova para a linha abaixo com j .

  5. Selecione visualmente o conteúdo da tag com vit .

  6. Substitua o texto selecionado ( foo2 ) pelo conteúdo do registro padrão ( foo1 ) usando p .

  7. Pare a macro com q . O conteúdo do registro padrão agora é foo2 , pronto para uso na próxima vez que a macro for invocada.

  8. Aplique a macro quantas vezes você precisar com algo como <number of rows>@x .

Resultado final:

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

Versão condensada:

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

Use outro registro nomeado na etapa 2 se não quiser mexer no registro padrão (e na área de transferência do sistema, se aplicável).

Se você quiser apenas aumentar o número em foo2 e Co, o plug-in VisIncr é muito bom.

    
por 04.06.2012 / 22:46

Tags