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

すがブロ

sugamasaoのhatenablogだよ

Vim の TagList で ActionScript3 を表示できるようにしてみた

actionscript vim

vim で TagList が使えるのは心強いですよね

そもそも TagList ってなんですか

という話は、こちらを参照してみてください Taglist プラグインがヤバい件 - @sugamasao.blog.title # => ”コードで世界を変えたい”
ようするに、メソッドや変数の一覧が出るウィンドウを表示できます、ということです。

で、TagList を使おうと思っても

デフォルトでは AS に ctags が対応していないから(よくわかってない)か、内容が表示されなくて途方にくれていました。
で、調べたら AS3 用の ctags で使用する正規表現とやらがあったので、使ってみた。
ついでに、イマイチ構文チェックがおかしい(public とかのキーワードと satatic が or 条件になってる)部分などがあったので、ちょっと手直ししてみた。

結果

~/.ctags に以下のように追記
--langdef=actionscript
--langmap=actionscript:.as
--regex-actionscript=/^[ \t]*[(private|public|protected) ( \t)]*class[ \t]+([A-Za-z0-9_]+)[ \t]*/\1/c,class, classes/
--regex-actionscript=/^[ \t]*[(private|public|protected) ( \t)]*[(static) ( \t)]*function[ \t]+([A-Za-z0-9_]+)[ \t]*\(/\1/f, function, functions/
--regex-actionscript=/^[ \t]*[(private|public|protected) ( \t)]*[(static) ( \t)]*const[ \t]+([A-Za-z0-9_]+)[ \t]*/\1/v,variable,variables/
--regex-actionscript=/^[ \t]*[(private|public|protected) ( \t)]*[(static) ( \t)]*var[ \t]+([A-Za-z0-9_]+)[ \t]*/\1/v,variable,variables/
--regex-actionscript=/^[ \t]*[(private|public|protected) ( \t)]*[(static) ( \t)]*function[ \t]+(set|get)[ \t]+([A-Za-z0-9_]+)[ \t]*\(/\1 \2/p,property, propertis/
--regex-actionscript=/.*\.prototype \.([A-Za-z0-9 ]+)=([ \t]?)function( [ \t]?)*\(/\1/ f,function, functions/
.vimrc に以下のように追記
let g:tlist_actionscript_settings = 'actionscript;c:class;v:var;p:property;m:method;f:function;o:object;const:constants'

本当は const で別の表示しようかと思って正規表現は別にしたものの、使い方がよくわかっていなくて vimrc との連携で挫折して var に表示されるようにしてしまった。
まぁ、大文字で書くからわかるんだけどね。

ついでに

TagList 用の設定はこんな感じ

nmap <F2> :Tlist<CR>
let Tlist_Ctags_Cmd = "/opt/local/bin/ctags"    "ctagsのパス
let Tlist_Show_One_File = 1               "現在編集中のソースのタグしか表示しない
let Tlist_Exit_OnlyWindow = 1             "taglistのウィンドーが最後のウィンドーならばVimを閉じる
"let Tlist_Use_Right_Window = 1            "右側でtaglistのウィンドーを表示

むかし、キーマップの書き方(作法)が悪いと言われて、そのうちなんとか直そうとおもいつつ放置しっぱなし><

で、こうすると

こんな風になるよー\(^o^)/

もし const の分け方とかご存知の方教えて下しあ!><