読者です 読者をやめる 読者になる 読者になる

VimでUnityのコードを編集する(2)

ゴールデンウィーク満喫中です。

私以外に何人この記事で得する人がいるのかは少々疑問ですが、今日は前回に引き続き、UnityのコードをVimで編集する際のTipsを書いてみたいと思います。

VimでUnityのコードを補完する

Vimでは専用の辞書ファイルを登録することで、利用環境に合わせた入力キーワードの補完ができるようになります。

しかし、残念ながらUnityのクラスやメソッドに対応した辞書ファイルは存在しないので、公式サイトのAPIリファレンススクレイピングして辞書ファイルを作成することにします。

Unity用辞書ファイルを作成する

UnityのAPIリファレンスから各種キーワードを抜き出すRubyスクリプトです。

require 'set'
require 'open-uri'

BASE_URL = 'http://docs.unity3d.com/ScriptReference/'
FILENAME = 'unity.dict'

def make_dict
  dict = Set.new
  parse_index(dict)
  open(FILENAME, 'w') do |f|
    dict.sort.each { |name| f.puts(name) }
  end
end

def parse_index(dict)
  file = download_file(File.join(BASE_URL, 'docdata/toc.js'))
  classes = file.scan(/"link":"(.*?)","title":"(.*?)"/m)

  classes.each do |item|
    link, name = item[0], item[1]
    if link != 'null' && link != 'toc'
      dict.add(name)
      parse_class(dict, "#{BASE_URL}#{link}.html")
    end
  end
end

def parse_class(dict, url)
  file = download_file(url)
  methods = file.scan(/class="lbl"><a href=.*?>(.*?)<\/a>/m)

  methods.flatten.each do |name|
    dict.add(name) unless name.start_with?('operator')
  end
end

def download_file(url)
  puts "download: #{url}"
  open(url) { |data| data.read }
end

make_dict

スクリプトで実際に作成した辞書ファイルがこちらです。

GitHubリポジトリにもソースコードと辞書ファイルを登録しておきましたので、必要に応じてご利用ください。

github.com

Vimに辞書ファイルを登録する

後は以下のリンクなどを参考に、Vimの補完設定に合わせて辞書ファイルを登録すれば完了です。

f:id:tkitao:20150502222449p:plain

無事補完できました。