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

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


当前回答

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

: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

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

其他回答

您可以打开另一个文件并键入:r file_to_be_copied_from。或者你可以缓冲。或者转到第一个文件,在你想复制的那行,输入“qY”,转到你想粘贴的文件,输入“qP”。

buffer_name,复制到缓冲区。Y是拉,P是放。希望有帮助!

2017 - 05年更新:

我刚刚发现,如果你在vimrc文件中添加以下一行,

设置剪贴板=不知名的

那么Vim正在使用系统剪贴板。


我刚刚发现yank的方式不会工作在我复制内容之间不同的Vim实例窗口的方式。(至少,根据我的Vim知识,它不能工作。我不知道是否有其他方法使其工作)。

根据我的测试,yank方法只适用于在同一个窗口中打开多个文件的情况。

如果你想这样做,你最好使用操作系统的剪切复制过去的方式,如Ctrl + x, Ctrl + c(在Windows下)。

这些地图对我来说很有吸引力:

vmap <C-c> "*y     " Yank current selection into system clipboard
nmap <C-c> "*Y     " Yank current line into system clipboard (if nothing is selected)
nmap <C-v> "*p     " Paste from system clipboard

因此,当我处于可视模式时,我选择我想要的行,并按Ctrl + c,然后按Ctrl + v将文本插入到接收文件中。你也可以用“*y”,但我认为有时候这个很难记住。

这也是有用的复制文本从Vim到剪贴板。

来源:使用临时文件在会话之间复制和粘贴

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

: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

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

如果你在Windows上使用Vim,你可以使用以下方法访问剪贴板(MS复制/粘贴):

"*dd—切一行(或3dd切三条线)

*yy—复制一行(或3yy复制三行)

*p——在光标后的行上粘贴行(s)

*P—在光标前面的行上粘贴一行(s)

它可以让你在不同的Vim窗口之间或在Vim和PC应用程序(记事本,Microsoft Word等)之间粘贴。