请问如何复制文件中的特定行,例如第10-20行、22行、24-30行,以便将其粘贴到另一个文件中?我看到了这篇stackoverflow帖子,但是我的问题不同。
这是一个有趣的小想法。将以下内容粘贴到您的~/.vimrc文件中:
command! -nargs=* Y :call YankList(<f-args>)
fun! YankList(...)
let yanklist = []
for i in a:000
if match(i, "-") != -1
let split = split(i, "-")
let yanklist = yanklist + range(split[0], split[1])
else
let yanklist = yanklist + i
endif
endfor
call setreg('"', "")
for i in yanklist
call setreg('"', getline(i), "al")
endfor
endfun
:Y 10-20 22 24-30
使用p
命令将它们粘贴到您想要它们的位置。(包括)
尽管这是一篇旧文章,我仍想对其进行编辑,以建议更“vimmy”地完成此操作。请参阅:help usr_10 | 131
。
您可以执行以下操作:
10GV20G"ay
22G"AY
24GV30G"Ay
G"ap
:g/foo/y "
:10,20yank
复制到新文件:
:new | put | 0d
:g/pattern/m$
复制(:copy或:t)
:g/pattern/t$
将内容复制到寄存器:
:let @a="" | g/pattern/y A
y A
将一块行附加到下一个空行,注册a
等。
m$
移动到结尾(这是我个人最喜欢的方法):m$
),则可以立即将它们写入另一个文件。例如: :$mark a
:g/pattern/t$
:'a,$w newfile.txt
复制与文件newfile.txt
匹配的行。现在从源文件中删除副本:
:'a,$d
同时打开两个文件 - 直接从命令行调用 vim fileone filetwo
或者打开 vim 然后输入 :e file
。你可以使用缓冲区命令在它们之间切换,对于两个文件,:bn
和 :bp
是等效的(缓冲区下一个,上一个)。然后只需复制这些行。
这可以很容易地完成:10G
跳转到第 10 行,y10y
复制接下来的十行,然后 :bn
和 p
将其粘贴到另一个文件中。