请教下vim中如何做到字符串匹配条件下的批量复制粘贴?

Vim、Emacs配置和使用
回复
wayne
帖子: 23
注册时间: 2006-05-02 10:54

请教下vim中如何做到字符串匹配条件下的批量复制粘贴?

#1

帖子 wayne » 2010-07-26 8:36

比如说我有一堆电话号码,现在要把所有“1330571”开头的全部复制粘贴到另一个文件里面去。 我尝试了一下global,发现可以根据这样的条件删除,比如“:g/1330571/d”,但是经过观察我发现,这个命令它其实是做了个循环操作,每次处理一行然后根据条件往下找,而不是一次d了一个块。这样的话,我再用p就只能粘贴到最后一行而已。请教下,是否有别的方法呢?
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 请教下vim中如何做到字符串匹配条件下的批量复制粘贴?

#2

帖子 lilydjwg » 2010-07-26 9:10

把以下脚本存到一个临时文件,然后在你的“一堆电话号码”那个文件窗口里执行:so 刚刚保存的文件,然后就可以去粘贴了。

代码: 全选

let @" = ''
for l in range(0, line('$'))
  if getline(l) =~ '^1330571'
    let @" .= getline(l)."\n"
  endif
endfor
也可以变通下,把文件复制一份(为安全起见),在副本中利用:v/^1330571/d把不要的行删掉,剩下的就可以拿去复制粘贴了。

其实何必用 Vim 呢,命令行多方便:

代码: 全选

grep '^1330571' 来源文件 | xsel -i
# 已经复制到中键的那个剪贴板了
wayne
帖子: 23
注册时间: 2006-05-02 10:54

Re: 请教下vim中如何做到字符串匹配条件下的批量复制粘贴?

#3

帖子 wayne » 2010-07-26 9:17

很不错,居然能用,非常感谢!!

不用grep是因为我在windows下用VIM……
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 请教下vim中如何做到字符串匹配条件下的批量复制粘贴?

#4

帖子 lilydjwg » 2010-07-26 12:48

wayne 写了: 不用grep是因为我在windows下用VIM……
http://unxutils.sourceforge.net/ grep, find, sed, gawk 等都有,独立程序,不像Cygwin那样要N多文件才能用。
回复