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 é deslocar todas as entradas na coluna DESCRIÇÃO para baixo. Então, eu gostaria de descer foo1
um passo, gostaria de descer foo2
um passo, etc. Mas gostaria de preservar todo o resto na tabela. Como posso fazer isso no vim?
Responder1
O que entendi é que você quer que a tabela fique assim, com uma estranha célula vazia abaixo 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áummaneira que você pode fazer isso:
Formate este código com
:%!column -t
um plugin do 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>
Vá para o primeiro item e exclua-o com
dit
.foo1
agora está no registro padrão.Inicie uma macro com
qx
(use qualquer letra disponível em vez dex
).Vá para a linha abaixo com
j
.Selecione visualmente o conteúdo da tag com
vit
.Substitua o texto selecionado (
foo2
) pelo conteúdo do registro padrão (foo1
) usandop
.Pare a macro com
q
. O conteúdo do registro padrão está agorafoo2
pronto para ser usado na próxima vez que a macro for chamada.Aplique a macro quantas vezes 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 incrementar o número em foo2
e Co, oPlug-in VisIncré muito bom.