在 vim 中移动 html 表格列

在 vim 中移动 html 表格列

我有一个 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>

我说得对吗?下面是你可以这样做:

  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. 移至第一个项目然后用 删除它ditfoo1现在位于默认寄存器中。

  3. 用 启动宏qx(使用任何可用的字母代替x)。

  4. 使用 移至下一行j

  5. 使用 可视地选择标签的内容vit

  6. 使用将选定的文本(foo2)替换为默认寄存器()的内容。foo1p

  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 插件非常好。

相关内容