我正在处理两个文件,我需要从一个文件复制几行并粘贴到另一个文件中。我知道如何在同一文件中复制(yy)和粘贴(p)。但这不适用于其他文件。怎么做?
另外,有没有办法剪切粘贴?我曾尝试使用Google谷歌搜索,但是大多数资源都只讲复制粘贴。
我正在处理两个文件,我需要从一个文件复制几行并粘贴到另一个文件中。我知道如何在同一文件中复制(yy)和粘贴(p)。但这不适用于其他文件。怎么做?
另外,有没有办法剪切粘贴?我曾尝试使用Google谷歌搜索,但是大多数资源都只讲复制粘贴。
Answers:
由于您已经知道如何剪切/拖动文本,因此有一些将其粘贴回另一个文件的想法:
:e /path/to/other/file
)中打开第二个文件并将其粘贴在拆分窗口中一起打开两个文件,然后使用Ctrl+ w,Up/ 在以下两个文件之间导航Down:
vi -o /path/to/file1 /path/to/file2
Ctrl
+ w
,s
。
:sp myfile
水平分割并打开指定文件的命令,但是如果我希望垂直分割窗口怎么办?
如果您在Windows上使用Vim,则可以使用以下方式访问剪贴板(MS复制/粘贴):
"*dd -剪一条线(或3dd剪三条线)
"*yy -复制一行(或3yy复制三行)
"*p -在光标之后的行上粘贴行
"*P -在光标之前的行上粘贴行
使您可以在单独的Vim窗口之间或Vim与PC应用程序(记事本,Microsoft Word等)之间粘贴。
+
跨平台的系统剪贴板寄存器(Windows和Linux)对*
,这是仅适用于Windows(+
Windows中的工作方式一样*
)。
使用d
喜欢dd
剪切的变体。
要将一系列行写入另一个文件,可以使用:
:<n>,<m> w filename
其中,<n>
和<m>
是数字(或符号),用于指定行范围。
要使用桌面剪贴板,请查看+g
命令。
ma
,移至最后一行mb
。然后,'
当您使用上述命令时,在标记的字母前加上a ::'a,'b w filename
您可以打开另一个文件并键入:r file_to_be_copied_from
。或者您可以缓冲。或转到第一个文件,转到要复制的行,键入"qY
,转到要粘贴的文件,然后键入"qP
。
"
buffer_name,复制到缓冲区。Y
很烂,P
被放。希望有帮助!
这是一种实现方法;
您也可以同时看到两个文件。用Ctrl+ 分割屏幕w s。
至于切割,d将切好的东西切成薄片并将其放置在猛拉缓冲器中。dd将“剪断”一条线。
这些都是不错的建议,但是如果您知道另一个文件中文本的位置,请轻松使用sed。:r! sed -n '1,10 p' < input_file.txt
这将在光标的当前位置的已打开文件中插入10行。
:r ! head -n2 file.py
这些重映射对我来说就像是一种魅力:
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复制到剪贴板也很有用。
在同一Vim实例中打开的两个缓冲区(==文件)之间复制文本是没有问题的:
只需使用提取一个缓冲区y(假设您之前在可视模式下标记了要复制的区域),然后使用粘贴到另一个缓冲区p。只要它们位于Vim的同一实例中,它也可以与不同的选项卡一起使用。
如何在Vim的同一实例中打开两个文件取决于您的系统:
vim file1 file2
--remote-silent
选项,以确保在同一实例中打开所有文件。如果您在两个不同的Vim实例中打开了两个文件,则必须使用系统剪贴板:在第一个Vim实例中,使用"+y
(再次在可视模式下标记要被拖动的区域)将文本拖入系统剪贴板。),然后转到第二个Vim并将剪贴板粘贴到其中:"+p
。
PS:
下面的选项大部分时间都可以使用,并且以后可以粘贴。
"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之后复制
如果要复制文件的一部分并将该内容粘贴到另一个文件的中间,可以采用这种方式。
:linenumber,linenumber write newfile
例:
:2,34 write temp1
要么
:'mark, 'mark write newfile
例:
:'a,'b write temp1
现在,将这些行复制到另一个文件。如果要在复制后删除这些行,可以执行
:linenumber1,linenumber2 d
要么
:'mark1,'mark2 d
现在,转到其他文件。然后将光标停留在要粘贴的行上。
类型
:r!cat temp1
现在,将临时文件的内容粘贴到此处。粘贴内容后,可以从命令行本身删除临时文件。
:!rm temp1
如果您想复制和粘贴几次,这将有所帮助。