インストールしている gem の最新バージョンでタグファイルを作成する

rubygems でインストールしている gem から最新バージョンのものだけを対象にして vim 用のタグファイルを作成する。ついでに ruby のライブラリに対してもタグファイルを作成。
こんなスクリプトを用意。これを実行したらそれぞれ ~/.tags-rubygems と ~/.tags-ruby が作成されます。(実行には exuberant-ctags が必要です)

 #! /usr/bin/ruby
 
 def make_tags(file, paths)
   args = [ "ctags-exuberant", "-f", file, "--languages=ruby", "-R" ] + paths
   system(*args)
 end
 
 ruby_tags = File.join(ENV["HOME"], ".tags-ruby")
 rubygems_tags = File.join(ENV["HOME"], ".tags-rubygems")
 
 ruby_paths = $:.select { |path| path[0] != ?. }
 $stderr.print "Generating tags #{ ruby_paths.join(', ') }..."
 make_tags(ruby_tags, ruby_paths)
 $stderr.print " done.\n"
 
 require 'rubygems'
 specs = {}
 Gem.cache.each do |long_name,spec|
   name = spec.name
   specs[name] ||= spec
   specs[name] = spec unless (specs[name] <=> spec) > 0
 end
 rubygems_names = specs.values.map { |v| v.full_name }.sort.join(", ")
 rubygems_paths = []
 specs.each_value do |spec|
   spec.require_paths.each do |path|
     rubygems_paths << File.join(spec.full_gem_path, path)
   end
 end
 
 $stderr.print "Generating tags #{rubygems_names}..."
 make_tags(rubygems_tags, rubygems_paths)
 $stderr.print " done.\n"

実行するとこんな感じ。

Generating tags /usr/local/lib/site_ruby/1.8, /usr/local/lib/site_ruby/1.8/i386-
linux, /usr/local/lib/site_ruby, /usr/lib/ruby/1.8, /usr/lib/ruby/1.8/i386-linux
... done.
Generating tags Ruby-MemCache-0.0.1, actionmailer-1.2.5, actionpack-1.12.5, acti
onwebservice-1.1.6, activerecord-1.14.4, activesupport-1.3.1, acts_as_versioned-
0.2.3, capistrano-1.1.0, cmdparse-2.0.0, color-tools-1.3.0, daemons-0.4.4, fcgi-
0.8.6.1, gem_plugin-0.2.1, gettext-1.7.0, gruff-0.0.5, highline-1.0.1, hpricot-0
.4, io-reactor-0.05, login_generator-1.2.0, memcache-client-1.0.3, mogilefs-clie
nt-1.0.1, mongrel-0.3.13.3, mongrel_upload_progress-0.1, needle-1.2.1, net-sftp-
1.1.0, net-ssh-1.0.8, pdf-writer-1.1.3, rails-1.1.6, rake-0.7.1, refe-0.8.0.3, r
openlaszlo-0.4.1, ruby-gdchart-1.0.0, ruby-postgres-0.7.1.2006.04.06, rubygems-u
pdate-0.9.0, scgi_rails-0.4.3, sendfile-0.9.2, sources-0.0.1, sqlite-ruby-2.2.3,
sqlite3-ruby-1.1.0, transaction-simple-1.3.0, tzinfo-0.3.1, webrick-webdav-1.0..
. done.

作成できたら ~/.vimrc に次の行を追加しておきます。

set tags+=~/.tags-ruby,~/.tags-rubygems