我正在处理两个文件,我需要从一个文件复制几行并粘贴到另一个文件。我知道如何复制(yy)和粘贴(p)在同一个文件。但这对不同的文件不起作用。这是怎么做到的?

还有,是否有一种方法可以剪切粘贴?我试着在谷歌上搜索过,但大多数资源只讨论复制粘贴。


当前回答

下面的选项在大多数时候都适用,也适用于以后的粘贴。

 "xnyy
x - buffer name
n - number of line to Yank - optional

被抽走的行将存储在缓冲区'x'中。 它可以在编辑的任何地方使用。

要将行粘贴到另一个文件中,

:e filename&location

例子: 在当前编辑中键入以下命令

:e /u/test/Test2.sh
and paste using "xP
P - before cursor
p - after cursor

完成操作

打开文件1:

vi Test1.sh

a10yy

-Yanked 10 lines

-现在打开当前编辑的第二个文件

*:e /u/test/Test2.sh*

-移动光标到你需要粘贴的行

*"ap*

缓冲区'*a*'中的行将被复制到当前游标pos之后

其他回答

这些都是很好的建议,但如果您知道文本在另一个文件中的位置,则可以轻松使用sed。: r !sed -n '1,10 p' < input_file.txt这将在一个已经打开的文件中插入10行到光标当前位置。

在同一个Vim实例中打开的两个缓冲区(==文件)之间复制文本是没有问题的:

简单地用y插入一个缓冲区(假设你之前在可视模式下标记了一个要复制的区域),然后用p粘贴到另一个缓冲区。只要它们在同一个Vim实例中,它也适用于不同的选项卡。

如何在同一个Vim实例中打开两个文件取决于你的系统:

在Win32上,如果你选择了两个或多个文件,上下文菜单中会有一个选项显示“Edit with one vim” 当您在控制台上时,您可以使用vim file1 file2实现它 如果使用Vim作为其他工具的编辑器,请确保指定——remote-silent选项,以确保在同一实例中打开所有文件

如果您在两个不同的Vim实例中打开了这两个文件,那么您必须使用系统剪贴板:在第一个Vim实例中,使用“+y”将文本插入系统剪贴板中(再次以可视模式标记要插入的区域),然后转到第二个Vim并将剪贴板粘贴在那里:“+p”。

在。vimrc中设置viminfo:

set viminfo=%,<1000,'10,/50,:100,h,f0,n~/.viminfo

这将在~/中保留多达1,000行被拉取的东西(您的“寄存器”)。viminfo文件,当你退出Vim。当您启动Vim时,它会恢复,因此您可以将它粘贴到另一个文件中。

请参阅viminfo文档,了解它可以跨会话持久化的所有其他内容。

目标:将一个文件的一部分保存到另一个文件中。

解决方案:

选择要保存的文本: 将光标定位到要开始选择的位置 按“v”选择字符或按“大写v”选择整行 将光标移动到要选择的内容的末尾 将所选文本保存到新文件中。类型:wSpace和新文件的名称。实际上你会看到 : <、> w new.txt 然后按Enter键

如果您想复制文件的一部分并将该内容粘贴到另一个文件的中间,可以使用这种方法。

:linenumber,linenumber write newfile

例子:

:2,34 write temp1

Or

:'mark, 'mark write newfile

例子:

:'a,'b write temp1

现在这些行被复制到另一个文件。 如果你想在复制后删除这些行,你可以这样做

:linenumber1,linenumber2 d

Or

:'mark1,'mark2 d

现在,转到另一个文件。 然后将光标保持在要粘贴的行上。

Type

:r!cat temp1

现在,临时文件的内容被粘贴到这里。 在粘贴内容之后,可以从命令行本身删除临时文件。

:!rm temp1

如果您想多次复制和粘贴,这将有所帮助。