分页: 1 / 1

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

发表于 : 2010-07-26 8:36
wayne
比如说我有一堆电话号码,现在要把所有“1330571”开头的全部复制粘贴到另一个文件里面去。 我尝试了一下global,发现可以根据这样的条件删除,比如“:g/1330571/d”,但是经过观察我发现,这个命令它其实是做了个循环操作,每次处理一行然后根据条件往下找,而不是一次d了一个块。这样的话,我再用p就只能粘贴到最后一行而已。请教下,是否有别的方法呢?

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

发表于 : 2010-07-26 9:10
lilydjwg
把以下脚本存到一个临时文件,然后在你的“一堆电话号码”那个文件窗口里执行: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
# 已经复制到中键的那个剪贴板了

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

发表于 : 2010-07-26 9:17
wayne
很不错,居然能用,非常感谢!!

不用grep是因为我在windows下用VIM……

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

发表于 : 2010-07-26 12:48
lilydjwg
wayne 写了: 不用grep是因为我在windows下用VIM……
http://unxutils.sourceforge.net/ grep, find, sed, gawk 等都有,独立程序,不像Cygwin那样要N多文件才能用。