【问题标题】:How to paste before the cursor after selecting a vertical block?选择垂直块后如何在光标前粘贴?
【发布时间】:2010-11-01 22:47:21
【问题描述】:

我很确定这一定存在,但如果它不存在,也许有一个宏......

我最喜欢的 vim 功能之一是在可视模式下插入之前(<C-v>,选择行,<C-I>,键入一点,然后 Esc)。

我的问题是我想在之前粘贴剪贴板内容,而不是“插入”。我试过<C-P>,但没有爱。

我已经阅读了备忘单,到处搜索,查看了这里的问题并没有找到它,但我肯定是在寻找错误的东西。

【问题讨论】:

  • 因为不存在关于在光标前粘贴的问题,所以在duckduckgobinggoogle 上搜索“vim paste before cursor”都会返回这个作为顶部结果,并且它恰好有这个问题的答案。
  • 请注意:在这种情况下,剪贴板内容是 1 行长,并且 OP 想要将 same 内容粘贴到 all 选定的行上。这就是 OP 真正想要的,但问题中没有解释。

标签: vim keyboard-shortcuts copy-paste


【解决方案1】:

一般情况下,P命令(大写,不同于p)将剪贴板的内容粘贴到光标位置之前。那是你要找的吗? (我不太清楚你说按下 Command+I 是什么意思,因为我的键盘没有 Command 键。)

【讨论】:

  • 好的,抱歉, 之前要插入。 只粘贴一次。
  • 嗯,这个答案可能不是最初的提问者想要的,但它似乎是其他所有人的解决方案。
  • 他们应该有一条规则,上面写着“如果未接受的答案的票数是第一个答案的 10 倍,则以 3 位数的数字忽略有关接受答案的规则”。只需将其接受或至少首先被看到。
【解决方案2】:

我假设您的意思是在可视块模式下使用I 在多行中插入相同的文本,而点击p 只会粘贴到当前行而不是所有选定的行。

在插入模式下,您可以点击C-r 后跟一个寄存器来插入该寄存器的内容,所以如果您想粘贴未命名的缓冲区,您可以输入

C-r"

同样,从剪贴板粘贴

C-r* 

通过像往常一样输入插入,然后使用C-r,您将获得所有选定行上的文本。

查看:h registers,了解您可以使用哪些寄存器。

【讨论】:

    【解决方案3】:

    5 月似乎晚了,但我也遇到了同样的问题。

    例如一个有两行的文件:


    酒吧

    1. 按 v:可视模式 在虚拟模式下选择 foo
    2. 按 y:复制
    3. 将光标移至“b”ar

    4-1。 按 p => bfooar

    4-2。 按 P(Shift+P) => foobar 这是我所期望的。

    TLDR:大写 P (shift + p)

    【讨论】:

    • 更简单:光标在 foo 行,按:gJ
    【解决方案4】:

    基于Alligator 解决方案,使用地图。

    例如在 3 种情况下粘贴字符串 _s_

    " |-- original --|-- pasted after C   --|-- pasted before C  --|-- pasted replacing C   --|
    " |--------------|------------------------------------------------------------------------|
    " |--          --|-- select column C  --|-- select column B  --|-- select column C      --|   --> step 0 (after copying/yanking a string) 
    " |--          --|-- press <leader>py --|-- press <leader>py --|-- press p              --|   --> step 1 if yanked
    " |--          --|-- press <leader>pc --|-- press <leader>pc --|-- press "+p            --|   --> step 1 if copied to clipboard
    "       ABCD              ABC_s_D               AB_s_CD                 AB_s_D 
    "       ABCD              ABC_s_D               AB_s_CD                 AB_s_D 
    "       ABCD              ABC_s_D               AB_s_CD                 AB_s_D 
    

    每个寄存器的映射(分别提取或复制)是:

    xnoremap <leader>py A<C-r>*<Esc>
    xnoremap <leader>pc A<C-r>+<Esc>
    

    在前面的示例中,我在 列之后粘贴(即使在 C 列之前粘贴,我也可以在 B 列之后粘贴)。如果需要粘贴之前,只需在 2 个映射中将 A 更改为 I

    如果以前,可以使用普通的p 而不是"+p:将+ 复制到* 寄存器(在表的最后一种情况下需要):

    nnoremap <leader>z :let @*='<C-r>+'<CR>
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多