Hatena::Groupiphone-dev

iPhoneアプリ開発まっしぐら★ このページをアンテナに追加 RSSフィード

引っ越し後の日記はコチラです

tokoromのその他の日記

2011-07-09

VimでのiOSアプリ開発に便利なsnippetsファイル作りました

01:48 | はてなブックマーク -  VimでのiOSアプリ開発に便利なsnippetsファイル作りました - iPhoneアプリ開発まっしぐら★

VimでのiOSアプリ開発生活を快適にするために、

  • Foundation.framework
  • UIKit.framework

のクラス、メソッドなどをヘッダーファイル*1から抜いてVim用のsnippetsファイルを作成しました。


snipMate.vim や neocomplcache で利用できる見込み*2です。

もし必要なかたがいらっしゃいましたら

からダウンロードをお願いします。


例えば、pushViewController:animated: のsnippetは、

snippet pushViewController:animated:
	pushViewController:${1:(UIViewController*)viewController} animated:${2:(BOOL)animated}

のように定義されており、どのメソッドも引数のところがプレースホルダになっています*3


なお、スニペット名をメソッドの名前そのままにして長いので、neocomplcasheによるスニペット補完の利用が推奨されます*4


以下、自分用メモ。


各フレームワークのtagsの作成

例えば、Foundation.frameworkとUIKit.frameworkのtagsを作成する場合、

$ ctags -R --language-force=ObjC /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/Foundation.framework/Headers /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/UIKit.framework/Headers

とする。

ObjCに対応したctagsを利用する必要あり。

他のフレームワークのやつも欲しければ、ヘッダーファイルが入っているフォルダのパスを加えればOK。


tagsからsnippetsファイルを作成

今回は、rubyでスクリプトを書いて対応。

  • tags2vimsnippets.rb
inputFileName = ARGV[0]
outputFileName = ARGV[1]

result = []
snippets = []
IO.foreach( inputFileName ) {|l|
    result = l.scan(/^[+-]([:a-zA-Z0-9_-]+).*\/\^[+-] \([^)]*\)([^;]+);/)
    if !result.empty?
        next if 6 > result[0][0].length 
        snippets.push( sprintf("snippet %s", result[0][0]) )
        t = result[0][1]
        t = t.gsub(' *', '*').gsub(' (', '(')
        count = 0
        while /([^{][^0-9]+?:)(\(.+?\)[^() ]+)/ =~ t
            count = count + 1
            t = t.sub(/([^{][^0-9]+?:)(\(.+?\)[^() ]+)/, sprintf('\1${%d:\2}', count))
            break if 64 < count
        end
        snippets.push( sprintf("\t%s", t) )
        next
    end
    result = l.scan(/^([:a-zA-Z0-9_]+)/)
    if !result.empty?
        next if 6 > result[0][0].length 
        snippets.push( sprintf("snippet %s", result[0][0]) )
        snippets.push( sprintf("\t%s", result[0][0]) )
    end
}

snippets.uniq!

out = open( outputFileName, 'w' )
snippets.each {|k|
    out.puts k
}
out.close

このスクリプトに先ほど作ったtagsファイルを渡してやる。

$ ruby tags2vimsnippets.rb tags objc.snippets

これでsnippetsファイル完成。

変な部分があったら正規表現を見直す必要あり。

*1:iOS4.3のSDKのもの

*2:手元ではsnipMate.vimのほうでしかチェックしてません

*3:全部チェックしているわけではないので不備はあるかも

*4:スニペット補完を使うなら生のメソッド名のままのほうが便利だと思います

KalynKalyn2011/09/16 19:19You know what, I'm very much inlcnied to agree.

ppoyzurtppoyzurt2011/09/16 20:49dShnsD <a href="http://lfyzjbluhbqu.com/">lfyzjbluhbqu</a>

hgvcreushgvcreus2011/09/17 21:369XOHOe , [url=http://sggbqokkwiui.com/]sggbqokkwiui[/url], [link=http://yzdkxnyyohny.com/]yzdkxnyyohny[/link], http://yommpsvjyaop.com/

gifkjbjbrygifkjbjbry2011/09/19 00:08HVLjji <a href="http://wwxbkjkabkiw.com/">wwxbkjkabkiw</a>

LungaLunga2013/10/12 18:03That takes us up to the next level. Great pongsit.

EricEric2013/10/13 21:07Thanks for sharing. Your post is a useful <a href="http://intzypm.com">cotniibutron.</a>

LailaLaila2013/10/14 03:10That's a nicely made answer to a chnileaglng question http://eqhdjuhzgv.com [url=http://sopkjtcqst.com]sopkjtcqst[/url] [link=http://qpuhxdv.com]qpuhxdv[/link]

RafaelRafael2013/10/15 17:55Wow! That's a really neat <a href="http://piskvjemlml.com">anwsre!</a>

HarunsHaruns2013/10/16 00:47You get a lot of respect from me for writing these helpful arsltiec. http://ofcuvsr.com [url=http://dohvfkcqk.com]dohvfkcqk[/url] [link=http://novxji.com]novxji[/link]