Vim - 防止光标移动到标记时移动

时间:2013-06-07 03:05:24

标签: vim copy-paste

我通常使用标记在Vim中剪切/粘贴。

要在第4行和第12行之间抽出文本,我会执行以下操作:

  1. 将光标移至第4行
  2. 键入mx以放置名为x
  3. 的标记
  4. 将光标移至第12行
  5. 键入y'x以在第4行和第12行之间抽取文本
  6. 执行此操作后,光标移回第4行。

    有没有办法让光标停留在原位(不移回标记)?

    如果有人有更好的方法做同样的事情,那也会很棒......

    提前致谢!


    更新

    我使用FDinoff的答案来创建一个映射,让我成为一个快乐的露营者:

    nnoremap YY y'x<C-O>
    

    从光标到名为x的标记,然后将光标返回到原来的位置。

    这已经节省了我的时间。再次感谢!

3 个答案:

答案 0 :(得分:9)

你跳到第4行的原因是因为你正在使用向后运动的方式。

                            *y* *yank*
["x]y{motion}       Yank {motion} text [into register x].  When no
            characters are to be yanked (e.g., "y0" in column 1),
            this is an error when 'cpoptions' includes the 'E'
            flag.

有问题的议案是'x,它跳转到标记x。光标移动到被拉动的部分的开头,在这种情况下是第4行,因为你是从第12行开始的。

然而你可以做的事情。

  1. 使用range作为前命令行模式。范围是.(当前行)到'x(标记x)。如果范围是向后的,请问你是否意味着另一个方向。这不会移动你的光标。 :.,'xy

  2. 或者你可以使用<C-o>将你跳回到你跳过的最后一个地方。 (评论中提到过。)

  3. 或者您可以使用']`]。这些命令会跳过最后一个被拉动的文本的最后一个字符。

答案 1 :(得分:3)

跳回:``<c-o>

如需更多帮助,请参阅:

:h ``
:h CTRL-O

答案 2 :(得分:1)

y12G怎么样? 这将从当前位置(第4行)拉到第12行。