我正在处理两个文件,需要将一个文件的几行复制并粘贴到另一个文件中。我知道如何在同一文件中复制(yy)和粘贴(p)。但是对于不同的文件,这样做无法实现。该如何操作?
此外,是否有剪切-粘贴的方法?我尝试过搜索,但大多数资源只讨论复制-粘贴。
我正在处理两个文件,需要将一个文件的几行复制并粘贴到另一个文件中。我知道如何在同一文件中复制(yy)和粘贴(p)。但是对于不同的文件,这样做无法实现。该如何操作?
此外,是否有剪切-粘贴的方法?我尝试过搜索,但大多数资源只讨论复制-粘贴。
在编辑文件时,使用
ma
- 设置a
标记
mb
- 设置b
标记
在需要复制到另一个文件中的位置,只需使用w
命令:
:'a,'bw /name/of/output/file.txt
在同一实例的Vim中打开的两个缓冲区(==文件)之间复制文本没有问题:
只需在一个缓冲区中使用y(假设您在可视模式下标记了要复制的区域),然后在另一个缓冲区中使用p粘贴即可。只要它们在同一个Vim实例中,不同的选项卡也可以工作。
如何在同一Vim实例中打开两个文件取决于您的系统:
vim file1 file2
来实现--remote-silent
选项,以确保所有文件都在同一实例中打开如果您在两个不同的Vim实例中打开了两个文件,则必须使用系统剪贴板:在第一个Vim实例中,使用"+y
将文本复制到系统剪贴板中(同样,在可视模式下标记要复制的区域),然后转到第二个Vim并在那里粘贴剪贴板:"+p
。
:'a,'bw /name/of/output/file.txt
如果你想复制文件的一部分,并将该内容粘贴在另一个文件的中间,你可以采用以下方法。
: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
"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*'
将在当前光标位置之后复制
示例: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
进入命令模式并运行
:r! sed -n '<start_line_num>, <end_line_num> p' file_to_extract_text_from
例如,从文件名
中提取20-30
行到当前打开的文件中
:r! sed -n '20, 30p' filename
在你的.vimrc
中设置viminfo
:
set viminfo=%,<1000,'10,/50,:100,h,f0,n~/.viminfo
这将在退出 Vim 时将最多 1,000 行已复制的内容(即“寄存器”)持久化到 ~/.viminfo
文件中。当您启动 Vim 时,它会被恢复,因此您可以将其粘贴到另一个文件中。
请参阅 viminfo
文档 以了解它可以在会话之间持久化的所有其他内容。
:vnoremap <F4> :y<CR><C-W>Wr<Esc>p