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

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


当前回答

进入命令模式并运行

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

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

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

其他回答

另一种方法是在两个分割缓冲区中打开两个文件,并在可视化选择感兴趣的行后使用下面的“snippet”。

:vnoremap <F4> :y<CR><C-W>Wr<Esc>p

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中将鼠标选择的文本复制到系统剪贴板的能力。

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

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

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

这里有一种方法;

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

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

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