我正在处理两个文件,我需要从一个文件复制几行并粘贴到另一个文件。我知道如何复制(yy)和粘贴(p)在同一个文件。但这对不同的文件不起作用。这是怎么做到的?
还有,是否有一种方法可以剪切粘贴?我试着在谷歌上搜索过,但大多数资源只讨论复制粘贴。
我正在处理两个文件,我需要从一个文件复制几行并粘贴到另一个文件。我知道如何复制(yy)和粘贴(p)在同一个文件。但这对不同的文件不起作用。这是怎么做到的?
还有,是否有一种方法可以剪切粘贴?我试着在谷歌上搜索过,但大多数资源只讨论复制粘贴。
当前回答
使用d的变化,如dd来切割。
要将一段行写入另一个文件,您可以使用:
:<n>,<m> w filename
其中<n>和<m>是数字(或符号),表示一行的范围。
要使用桌面剪贴板,请参阅+g命令。
其他回答
另一种方法是在两个分割缓冲区中打开两个文件,并在可视化选择感兴趣的行后使用下面的“snippet”。
:vnoremap <F4> :y<CR><C-W>Wr<Esc>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之后
您可以打开另一个文件并键入:r file_to_be_copied_from。或者你可以缓冲。或者转到第一个文件,在你想复制的那行,输入“qY”,转到你想粘贴的文件,输入“qP”。
buffer_name,复制到缓冲区。Y是拉,P是放。希望有帮助!
这些地图对我来说很有吸引力:
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到剪贴板。
来源:使用临时文件在会话之间复制和粘贴
这些都是很好的建议,但如果您知道文本在另一个文件中的位置,则可以轻松使用sed。: r !sed -n '1,10 p' < input_file.txt这将在一个已经打开的文件中插入10行到光标当前位置。