Vim 将内容从vi中的一个文件复制并粘贴到另一个文件
我正在处理两个文件,我需要从一个文件中复制几行并粘贴到另一个文件中。我知道如何在同一个文件中复制(yy)和粘贴(p)。但这不适用于不同的文件。这是怎么做到的Vim 将内容从vi中的一个文件复制并粘贴到另一个文件,vim,copy-paste,vi,cut,Vim,Copy Paste,Vi,Cut,我正在处理两个文件,我需要从一个文件中复制几行并粘贴到另一个文件中。我知道如何在同一个文件中复制(yy)和粘贴(p)。但这不适用于不同的文件。这是怎么做到的 还有,有没有剪贴的方法?我曾尝试过谷歌搜索,但大多数参考资料只讨论复制粘贴。既然您已经知道如何剪切/拖动文本,下面是一些将其粘贴回另一个文件的想法: 编辑第一个文件,拖动所需的文本。然后从vi中打开第二个文件(:e/path/to/other/file)并粘贴它 在拆分窗口中同时打开这两个文件,并使用Ctrl+w、上/下键在它们之间导航:
还有,有没有剪贴的方法?我曾尝试过谷歌搜索,但大多数参考资料只讨论复制粘贴。既然您已经知道如何剪切/拖动文本,下面是一些将其粘贴回另一个文件的想法:
- 编辑第一个文件,拖动所需的文本。然后从vi中打开第二个文件(
)并粘贴它:e/path/to/other/file
- 在拆分窗口中同时打开这两个文件,并使用Ctrl+w、上/下键在它们之间导航:
vi-o/path/to/file1/path/to/file2
- 在第一个文件中,Ctrl+w,s
- 使用
d
的变体,如dd
进行切割
要将一系列行写入另一个文件,可以使用:
:<n>,<m> w filename
:,w文件名
其中
和
是表示一系列行的数字(或符号)
要使用桌面剪贴板,请查看
+g
命令。您可以打开另一个文件并键入:r file\u to\u be\u copy\u from
。或者你可以缓冲。或者转到第一个文件,转到要复制的行,键入“qY
,转到要粘贴的文件并键入“qP
“
buffer\u name,复制到缓冲区。Y
被猛拉,而p
被放入。希望这有帮助!这里有一种方法
- 启动Vim并打开您正在处理的文件file1
- :e file2,它将显示file2,即您要从中复制行的文件
- 找到要复制的行。如果是三行,则点击3yy
- :b1这将切换到缓冲区1,其中文件1为
- 找出你想要插入的线的位置,然后点击p
对于剪切,d将剪切的内容剪切并放置在yank缓冲区中。dd将“剪切”一行。在同一Vim实例中打开的两个缓冲区(=文件)之间复制文本没有问题: 只需用y拖动一个缓冲区(假设您之前在视觉模式下标记了a以复制区域),然后用p粘贴到另一个缓冲区中。只要不同的选项卡位于相同的Vim实例中,它也可以使用不同的选项卡 如何在同一Vim实例中打开两个文件取决于您的系统:
- 在Win32上,上下文菜单中有一个选项,如果选择两个或多个文件,则会说“使用一个vim编辑”
- 当您在控制台上时,可以使用
vim file1 file2
- 如果将Vim用作其他工具的编辑器,请确保指定
选项,以确保在同一实例中打开所有文件--remote silent
如果在两个不同的Vim实例中打开了两个文件,则必须使用系统剪贴板:在第一个Vim实例中,使用
“+y
(再次,在之前的视觉模式下标记要拖动的区域)将文本拖动到系统剪贴板中,然后转到第二个Vim并将剪贴板粘贴到那里:“+p
如果您在Windows上使用Vim,您可以通过以下方式访问剪贴板(MS copy/paste):
“*dd——切一条线(或3dd切三条线)
“*yy——复制一行(或3yy复制三行)
“*p——在光标后的行上粘贴行
“*p——在光标前的行上粘贴行
允许您在单独的Vim窗口之间或Vim与PC应用程序之间进行粘贴(,等等)。2017-05更新:
我刚刚发现,如果在vimrc文件中添加以下行
设置剪贴板=未命名
然后Vim正在使用系统剪贴板
我刚刚发现yank方法无法在不同Vim实例窗口之间复制内容。(至少,基于我对Vim的了解,它不起作用。我不知道是否有其他方法可以让它起作用) 根据我的测试,yank方式只适用于在同一窗口中打开多个文件的方式
如果要这样做,最好使用操作系统剪切复制过去的方式,如Ctrl+x、Ctrl+c(在Windows下)。编辑文件时,在希望开始和结束使用的位置进行标记
ma
-设置a
标记
mb
-设置b
标记
然后,要将其复制到另一个文件中,只需使用w
命令:
:'a,'bw /name/of/output/file.txt
这些都是很好的建议,但若您知道文本在另一个文件中的位置,那个么可以轻松地使用sed<代码>:r!sed-n'1,10 p'
:'a,'bw /name/of/output/file.txt
示例:fileA和fileB-从fileA的第25行开始,复制50行,然后粘贴到fileB
fileA
Goto 25th line
25G
copy 50 lines into buffer v
"v50yy
Goto fileB
:e fileB
Goto line 10
10G
paste contents of buffer v
"vp
下面的选项在大多数情况下都有效,以后也可以粘贴
"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*
--缓冲区中的行将被复制到当前光标位置后。目标:将一个文件的一部分保存到另一个文件 解决方案:
- 将光标放置在要开始选择的位置
- 按v键选择字符
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
: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
:vnoremap <F4> :y<CR><C-W>Wr<Esc>p
:r! sed -n '<start_line_num>, <end_line_num> p' file_to_extract_text_from
:r! sed -n '20, 30p' filename