我有一個 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
我的理解是,你希望表格看起來像這樣,下面有一個奇怪的空白單元格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>
…
我對嗎?這是一你可以這樣做:
:%!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>
移至第一項,然後使用 刪除它
dit
。foo1
現在在預設暫存器中。使用以下命令啟動巨集
qx
(使用任何可用的字母而不是x
)。使用 移到下面的行
j
。直觀地選擇帶有 的標籤內容
vit
。使用 ,將所選文字 (
foo2
) 替換為預設暫存器 () 的內容。foo1
p
使用 停止巨集
q
。預設暫存器的內容現在已foo2
準備好供下次呼叫巨集時使用。使用諸如 之類的指令多次套用巨集
<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 插件非常好。