我正在处理两个文件,我需要从一个文件中复制几行并粘贴到另一个文件中。我知道如何在同一个文件中复制(yy)和粘贴(p)。但这不适用于不同的文件。这是怎么做到的?
另外,有没有什么方法可以剪切?我试过谷歌搜索,但大多数资源只谈论复制粘贴。
我正在处理两个文件,我需要从一个文件中复制几行并粘贴到另一个文件中。我知道如何在同一个文件中复制(yy)和粘贴(p)。但这不适用于不同的文件。这是怎么做到的?
另外,有没有什么方法可以剪切?我试过谷歌搜索,但大多数资源只谈论复制粘贴。
由于您已经知道如何剪切/拉动文本,因此这里有一些将其粘贴回另一个文件的想法:
:e /path/to/other/file
) 中打开第二个文件并粘贴在拆分窗口中同时打开这两个文件,并使用Ctrl+ w、Up/在它们之间导航Down:
vi -o /path/to/file1 /path/to/file2
如果您在 Windows 上使用 Vim,您可以使用以下方法访问剪贴板(MS 复制/粘贴):
"*dd-- 剪切一条线(或 3dd 剪切三条线)
"*yy-- 复制一行(或 3yy 复制三行)
"*p -- 在光标后的行上粘贴行
"*P -- 在光标前的行上粘贴行
使用d
like的变体dd
来切割。
要将一系列行写入另一个文件,您可以使用:
:<n>,<m> w filename
其中<n>
和<m>
是指定一系列行的数字(或符号)。
要使用桌面剪贴板,请查看+g
命令。
您可以打开另一个文件并键入: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 行。
2017 年 5 月更新:
我刚刚发现,如果您在 vimrc 文件中添加以下行,
设置剪贴板=未命名
那么 Vim 正在使用系统剪贴板。
我刚刚发现 yank 方式不适用于在不同 Vim 实例窗口之间复制内容的方式。(至少,根据我的 Vim 知识,它不起作用。我不知道是否有其他方法可以使它起作用)。
根据我的测试,yank 方式仅适用于在同一窗口中打开多个文件的方式。
如果你想这样做,你最好使用 OS cut-copy-past 方式,例如Ctrl+ x,Ctrl+ c(在 Windows 下)。
编辑文件时,在您希望开始和结束使用的位置做标记
ma
- 设置a
标记
mb
- 设置b
标记
然后,要将其复制到另一个文件中,只需使用以下w
命令:
:'a,'bw /name/of/output/file.txt
PS:
这些重映射对我来说就像一个魅力:
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 复制到剪贴板也很有用。
目标:将一个文件的一部分保存到另一个文件中。
解决方案:
将选定的文本保存到新文件。新文件的类型:wSpace和名称。其实你会看到
:'<,'>w new.txt
然后按Enter
在同一个 Vim 实例中打开的两个缓冲区(== 文件)之间复制文本没有问题:
只需在一个缓冲区中拉入y(假设您之前在可视模式下标记了一个复制区域),然后使用 . 粘贴到另一个缓冲区中p。只要它们在同一个 Vim 实例中,它也适用于不同的选项卡。
如何在同一个 Vim 实例中打开两个文件取决于您的系统:
vim file1 file2
--remote-silent
选项以确保所有文件都在同一个实例中打开如果你在两个不同的 Vim 实例中打开这两个文件,那么你必须使用系统剪贴板:在第一个 Vim 实例中,使用"+y
(再次,在可视模式下标记要被拉取的区域之前) ),然后转到第二个 Vim 并将剪贴板粘贴到那里:"+p
.
我的情况是我需要从文件 1 复制中间的 n 行,n 未知行到文件 2。
:'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
The below option works most of time and also for pasting later.
"xnyy
x - buffer name
n - number of line to Yank - optional
The lines yanked will be stored in the buffer 'x'
.
It can be used anywhere in the edit.
To paste line(s) in the other file,
:e filename&location
Example: Type the below command in the current edit
:e /u/test/Test2.sh
and paste using "xP
P - before cursor
p - after cursor
Complete operation
open file 1 :
vi Test1.sh
a10yy
-Yanked 10 lines
-now open the second file from the current edit
*:e /u/test/Test2.sh*
-move the cursor to the line where you have to paste
*"ap*
--Lines from the buffer '*a*'
will be copied after the current cursor 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
如果您想多次复制和粘贴,这将有所帮助。
另一种方法是在两个拆分缓冲区中打开这两个文件,并在视觉选择感兴趣的行之后使用以下“片段”。
:vnoremap <F4> :y<CR><C-W>Wr<Esc>p
进入命令模式并运行
:r! sed -n '<start_line_num>, <end_line_num> p' file_to_extract_text_from
20-30
例如从filename
当前打开的文件中提取行
:r! sed -n '20, 30p' filename
设置viminfo
在你的.vimrc
:
set viminfo=%,<1000,'10,/50,:100,h,f0,n~/.viminfo
~/.viminfo
当您退出 Vim 时,这将在文件中保留多达 1,000 行被拉取的内容(您的“寄存器”) 。当你启动 Vim 时它会恢复,所以你可以将它粘贴到不同的文件中。
有关它可以跨会话持续存在的所有其他内容,请参阅viminfo
文档。