有人可以告诉我如何复制特定的行,例如 文件中的第10-20,22,24-30行,所以我可以将其粘贴到另一个文件中? 我看到this stackoverflow帖子,正如有人指出的那样,但是,我在问一个不同的问题
答案 0 :(得分:3)
这是一个有趣的小主意。将其粘贴到〜/ .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
将它们粘贴到您想要的任何位置。 (含)
我想编辑这篇文章,即使它已经过时了,建议采用更“吵闹”的方式。请参阅:help usr_10 | 131
。
你可以这样做:
10GV20G"ay
22G"AY
24GV30G"Ay
G"ap
此外,如果某些特定模式包含这些行中的每一行,那么您可以通过所述模式获取它们。比方说,我想把所有包含单词“foo”的行拉出来,然后我就可以了
:g/foo/y "
答案 1 :(得分:1)
使用视觉模式,或直接使用:
:10,20yank
复制到新文件:
:new | put | 0d
通常,您要么有一个标准,例如将包含pattern
的所有行移到末尾:
:g/pattern/m$
复制(:复制或:t)
:g/pattern/t$
要抓到注册表:
:let @a="" | g/pattern/y A
现在,您可以随时随地使用它,例如“ a P 将其粘贴。
如果您没有这样的图案,请使用文字动作,例如} : y A
附加一行直到下一个空行以注册a
等。
修改 PS。我想我会解释一下 为什么 我提到m$
移到最后(我个人最喜欢的):
如果您选择将行移动/复制到文件的末尾(m$
),则可以立即将它们写入另一个文件。 E.g。
:$mark a
:g/pattern/t$
:'a,$w newfile.txt
复制与文件newfile.txt
匹配的行。现在从源文件中删除副本:
:'a,$d
答案 2 :(得分:1)
这是一个使用寄存器的简单解决方案。
使用您提供的方案,需要抽取10-20,22,24-30行
用“A”猛击每个小组。
:10,20y A
:22y A
:24,30y A
此时,您将每组行都复制到“A”寄存器中。现在您可以像往常一样使用p
进行粘贴,或者您可以使用"Ap
(双引号,注册信,然后p
将您抽出的那些粘贴到A注册。
答案 3 :(得分:0)
打开这两个文件 - 直接从命令行调用vim fileone filetwo
或打开vim然后:e file
。然后,您可以使用缓冲区命令在它们之间切换,因为两个文件:bn
和:bp
是等效的(缓冲区接下来,前一个)。然后只需复制这些行。
这可以非常轻松地完成:10G
转到第10行,y10y
复制下十行,然后:bn
和p
将其粘贴到第10行其他档案。