使用Vim剪切和粘贴元素并有效地将其移动到另一条线

时间:2013-12-14 10:17:42

标签: html vim yank

所以我继续使用vim ...我在这里有这段HT​​ML:

<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 +&lt;&lt; (缩进一个,因为它使用了原来的缩进,这是由于列在列表中而另外一个)
  6. 然后有关于删除标签的下一个问题 - 很可能有一个插件可以帮助我,我现在将会追捕它。

    我做了多久的啰嗦?有没有更快捷的方式或更有效的方法来实现这一目标? (不包括删除标题周围列表标签的内容。

2 个答案:

答案 0 :(得分:4)

蒂姆·波普的unimpaired plugin以及我的LineJuggler plugin提供]e映射以快速移动线路。这样,您可以使用1[e将行从19移动到17(即超过18)。

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

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

答案 1 :(得分:0)

使用surround.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>