1

所以我继续使用 vim ......我在这里有这段 html:

<div id=container>
    <ol>
        <li><h1>banner</h1></li>
        <li><first_item</li>
        <li><second_item</li>
        <li><third_item</li>
        <li><fourth_item</li>
</div>

div 标签从第 17 行开始。我将标题之一移出列表,但仍在 div 标签内。我的动作是:

  1. 19gg(转至第 19 行)
  2. dd(这是删除线,但我认为它也与切割线相同)
  3. 17gg(去17号线)
  4. p (粘贴到此处将粘贴的行带到下一行)
  5. shift + << (缩进一个,因为它使用了原来的缩进,因为它在列表中,所以又多了一个缩进)

然后是关于删除标签的下一个问题 - 很可能有一个插件可以帮助我,我现在将寻找它。

我做的事情是不是很啰嗦?有没有更快或更有效的方法来实现这一目标?(不包括关于删除标题周围的列表标签的部分。

4

2 回答 2

4

Tim Pope 的unimpaired plugin以及我的LineJuggler 插件提供]e映射以快速移动线条。有了它,您可以使用1[e.

要删除周围的标签,请查看同样来自 Tim的 round.vim - Delete/change/add parentheses/quotes/XML-tags 。或者,您可以删除内部标记 ( dat),并使用我的UnconditionalPaste 插件glp映射将其粘贴为单独的行,或者甚至使用g[p第 18 行以正确的缩进(当前行)粘贴到上面。

PS:代替19gg,你也可以做19G;仍然是两个按键,但是是并行的。

于 2013-12-14T10:36:34.043 回答
0

使用环绕.vim

/li<CR> " jump to the first <li>
dst     " remove surrounding <li> and </li>
dd      " cut the line
k       " move up one line
[p      " paste above with the same indent

没有:

/li<CR> " jump to the first <li>
da<     " delete <li>
$       " jump to end of line
.       " repeat deletion
dd      " cut the line
k       " move up one line
[p      " paste above with the same indent

或者:

/li<CR> " jump to the first <li>
"xyit   " yank what's inside the `<li>` into register xd
dd      " cut the line
k       " move up one line
O       " open a new line above
<C-r>=x " insert content of register x

顺便说一句,您<ol>缺少一个</ol>.

于 2013-12-14T21:42:20.667 回答