【问题标题】:gvim paste on multiple rows from external applicationgvim 从外部应用程序粘贴到多行
【发布时间】:2013-05-30 13:42:40
【问题描述】:

我在 vim 中得到了一段长度不同的 3 行文本。我从外部应用程序(如 word 或记事本)中获得了另外 3 行的数据块,我想将其附加并粘贴到所有这 3 行上。我发现了一些关于此事的帖子https://superuser.com/questions/300362/vim-how-to-paste-a-block-of-text-at-the-end-of-multiple-linescut and paste multiple lines in vim(还有Paste multiple times),但它们似乎只在最初从vim 中提取内容时才有效。 clipboard=unnamed 已设置。

这是我想要实现的示例(从第一篇文章中窃取;-D):

//Comment1
//Comment2
//Comment3

来自外部应用程序的数据块

foo = 1;
bar = 2;
baz = 3;

原始数据

foo = 1; //Comment1
bar = 2; //Comment2
baz = 3; //Comment3

结果

【问题讨论】:

    标签: vim blocking paste


    【解决方案1】:

    在 Vim 中,抽出的文本可以是三种类型:“按字符”、“按行”或“按块”。虽然 Vimscript 可以更改寄存器内容的类型,但它肯定不是很实用 (:help setreg())。

    最简单的方法是:

    • 将这些 cmets 粘贴到原始数据上方或下方的某个位置
    • 点击 <C-v> 进入可视块模式并选择该 cmets 块
    • 点击d删除它
    • 将光标移到原始数据的第一行
    • 点击p 以“逐块”粘贴

    【讨论】:

    • 这也很好用。感谢您不使用插件。只需要额外的两个步骤。还 +1 提醒我注册格式。
    【解决方案2】:

    您可以使用我的UnconditionalPaste plugin。它提供了一个gbp 映射,强制粘贴为blockwise,无论寄存器被拉出的模式如何。 (它还有其他相关的按字符和按行粘贴的映射,等等!)

    使用它,将光标定位在第一行的末尾,并使用"+gbp

    【讨论】:

    • 感谢另一个很棒的插件。进行了第二次尝试。重要提示:clipboard=unnamed 不能设置。不然不行!
    • 当线条有不同的长度并且第一个不是最长的时候,我该怎么做才能使它工作?仅供参考,从 MS Word 粘贴不起作用。我猜行尾是乱七八糟的什么的。
    • 我对@9​​87654325@没有任何问题;有了它,我什至不必使用 "+ 前缀!
    • 对于不同的行长,:set virtualedit=all允许你将光标定位在第一行的正确位置。
    【解决方案3】:

    这是我会做的事情(<CR> = Enter Key, <ctrl-v> control+v):

    e: external_application.c<CR>
    <ctrl-v>G$"py
    e original_data.c<CR>
    gg$"pp
    

    【讨论】:

    • 第一行和第三行是做什么的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多