我正在处理两个文件,我需要从一个文件复制几行并粘贴到另一个文件。我知道如何复制(yy)和粘贴(p)在同一个文件。但这对不同的文件不起作用。这是怎么做到的?
还有,是否有一种方法可以剪切粘贴?我试着在谷歌上搜索过,但大多数资源只讨论复制粘贴。
我正在处理两个文件,我需要从一个文件复制几行并粘贴到另一个文件。我知道如何复制(yy)和粘贴(p)在同一个文件。但这对不同的文件不起作用。这是怎么做到的?
还有,是否有一种方法可以剪切粘贴?我试着在谷歌上搜索过,但大多数资源只讨论复制粘贴。
当前回答
我的场景是,我需要拷贝中间n行,n未知,从文件1到文件2。
:'a,'bw /name/of/output/file.txt
其他回答
2017 - 05年更新:
我刚刚发现,如果你在vimrc文件中添加以下一行,
设置剪贴板=不知名的
那么Vim正在使用系统剪贴板。
我刚刚发现yank的方式不会工作在我复制内容之间不同的Vim实例窗口的方式。(至少,根据我的Vim知识,它不能工作。我不知道是否有其他方法使其工作)。
根据我的测试,yank方法只适用于在同一个窗口中打开多个文件的情况。
如果你想这样做,你最好使用操作系统的剪切复制过去的方式,如Ctrl + x, Ctrl + c(在Windows下)。
使用d的变化,如dd来切割。
要将一段行写入另一个文件,您可以使用:
:<n>,<m> w filename
其中<n>和<m>是数字(或符号),表示一行的范围。
要使用桌面剪贴板,请参阅+g命令。
下面的选项在大多数时候都适用,也适用于以后的粘贴。
"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之后
这里有一种方法;
启动Vim并打开正在处理的文件file1。 :e file2,将会弹出file2,即你想要从其中复制行的文件。 找到要复制的行。如果是三行,点击3yy 这将切换到缓冲区1,file1所在的位置 找出你想插入的线的位置,然后点击p
您也可以让两个文件都可见。用Ctrl + w s来分割屏幕。
至于切割,d切割并将切割的东西放在yank缓冲区中。Dd会“切”出一条线。
Make sure you have the Vim version compiled with clipboard support :echo has('clipboard') should return 1 if it returns 0 (for example Mac OS X, at least v10.11 (El Capitan), v10.9 (Mavericks) and v10.8 (Mountain Lion) - comes with a Vim version lacking clipboard support), you have to install a Vim version with clipboard support, say via brew install vim (don't forget to relaunch your terminal(s) after the installation) Enter a visual mode (V - multiline, v - plain, or Ctrlv - block-visual) Select line(s) you wish to copy "*y - to copy selected "*p - to paste copied
P.S:
如果你需要复制粘贴一行,你可以用JayG回答的说明替换步骤2-5 为了方便选择行,你可以添加set mouse+=a到你的.vimrc -它将允许你在Vim中使用鼠标选择行,而不选择无关的元素(如行号等)注意:它将阻止从Vim中将鼠标选择的文本复制到系统剪贴板的能力。