我正在处理两个文件,我需要从一个文件复制几行并粘贴到另一个文件。我知道如何复制(yy)和粘贴(p)在同一个文件。但这对不同的文件不起作用。这是怎么做到的?
还有,是否有一种方法可以剪切粘贴?我试着在谷歌上搜索过,但大多数资源只讨论复制粘贴。
我正在处理两个文件,我需要从一个文件复制几行并粘贴到另一个文件。我知道如何复制(yy)和粘贴(p)在同一个文件。但这对不同的文件不起作用。这是怎么做到的?
还有,是否有一种方法可以剪切粘贴?我试着在谷歌上搜索过,但大多数资源只讨论复制粘贴。
当前回答
在。vimrc中设置viminfo:
set viminfo=%,<1000,'10,/50,:100,h,f0,n~/.viminfo
这将在~/中保留多达1,000行被拉取的东西(您的“寄存器”)。viminfo文件,当你退出Vim。当您启动Vim时,它会恢复,因此您可以将它粘贴到另一个文件中。
请参阅viminfo文档,了解它可以跨会话持久化的所有其他内容。
其他回答
这些都是很好的建议,但如果您知道文本在另一个文件中的位置,则可以轻松使用sed。: r !sed -n '1,10 p' < input_file.txt这将在一个已经打开的文件中插入10行到光标当前位置。
如果您想复制文件的一部分并将该内容粘贴到另一个文件的中间,可以使用这种方法。
: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
如果您想多次复制和粘贴,这将有所帮助。
下面的选项在大多数时候都适用,也适用于以后的粘贴。
"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之后
既然你已经知道如何剪切/拉出文本,下面是一些粘贴到另一个文件的想法:
编辑第一个文件,截取你想要的文本。然后在vi (:e /path/to/other/file)中打开第二个文件并粘贴它 在拆分窗口中打开这两个文件,并使用Ctrl + w在它们之间导航,向上/向下任意操作: Vi -o /path/to/file1 /path/to/file2 .使用实例 在第一个文件中,按Ctrl + w, s
另一种方法是在两个分割缓冲区中打开两个文件,并在可视化选择感兴趣的行后使用下面的“snippet”。
:vnoremap <F4> :y<CR><C-W>Wr<Esc>p