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

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


当前回答

既然你已经知道如何剪切/拉出文本,下面是一些粘贴到另一个文件的想法:

编辑第一个文件,截取你想要的文本。然后在vi (:e /path/to/other/file)中打开第二个文件并粘贴它 在拆分窗口中打开这两个文件,并使用Ctrl + w在它们之间导航,向上/向下任意操作: Vi -o /path/to/file1 /path/to/file2 .使用实例 在第一个文件中,按Ctrl + w, s

其他回答

这里有一种方法;

启动Vim并打开正在处理的文件file1。 :e file2,将会弹出file2,即你想要从其中复制行的文件。 找到要复制的行。如果是三行,点击3yy 这将切换到缓冲区1,file1所在的位置 找出你想插入的线的位置,然后点击p

您也可以让两个文件都可见。用Ctrl + w s来分割屏幕。

至于切割,d切割并将切割的东西放在yank缓冲区中。Dd会“切”出一条线。

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

 "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之后

2017 - 05年更新:

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

设置剪贴板=不知名的

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


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

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

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

进入命令模式并运行

:r! sed -n '<start_line_num>, <end_line_num> p' file_to_extract_text_from

例如,将文件名中的20-30行提取到当前打开的文件中

:r! sed -n '20, 30p' filename

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

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

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

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

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

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