我正在处理两个文件,我需要从一个文件复制几行并粘贴到另一个文件。我知道如何复制(yy)和粘贴(p)在同一个文件。但这对不同的文件不起作用。这是怎么做到的?
还有,是否有一种方法可以剪切粘贴?我试着在谷歌上搜索过,但大多数资源只讨论复制粘贴。
我正在处理两个文件,我需要从一个文件复制几行并粘贴到另一个文件。我知道如何复制(yy)和粘贴(p)在同一个文件。但这对不同的文件不起作用。这是怎么做到的?
还有,是否有一种方法可以剪切粘贴?我试着在谷歌上搜索过,但大多数资源只讨论复制粘贴。
当前回答
如果你在Windows上使用Vim,你可以使用以下方法访问剪贴板(MS复制/粘贴):
"*dd—切一行(或3dd切三条线)
*yy—复制一行(或3yy复制三行)
*p——在光标后的行上粘贴行(s)
*P—在光标前面的行上粘贴一行(s)
它可以让你在不同的Vim窗口之间或在Vim和PC应用程序(记事本,Microsoft Word等)之间粘贴。
其他回答
如果您想复制文件的一部分并将该内容粘贴到另一个文件的中间,可以使用这种方法。
: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
如果您想多次复制和粘贴,这将有所帮助。
这里有一种方法;
启动Vim并打开正在处理的文件file1。 :e file2,将会弹出file2,即你想要从其中复制行的文件。 找到要复制的行。如果是三行,点击3yy 这将切换到缓冲区1,file1所在的位置 找出你想插入的线的位置,然后点击p
您也可以让两个文件都可见。用Ctrl + w s来分割屏幕。
至于切割,d切割并将切割的东西放在yank缓冲区中。Dd会“切”出一条线。
进入命令模式并运行
:r! sed -n '<start_line_num>, <end_line_num> p' file_to_extract_text_from
例如,将文件名中的20-30行提取到当前打开的文件中
:r! sed -n '20, 30p' filename
在编辑文件时,在希望使用的开始和结束处做标记
马云树立了一个标杆
MB -设置b标记
然后,复制到另一个文件,只需使用w命令:
:'a,'bw /name/of/output/file.txt
这些地图对我来说很有吸引力:
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到剪贴板。
来源:使用临时文件在会话之间复制和粘贴