Sencha Advent Calendar 2015 - 12月13日 vimなお話

今年もこの季節がやってきましたね。
ということで、今回は Sencha vim のお話です。

Advent Calendarの記事の中にいくつかIDEだったりプラグインの紹介だったりがチラホラありますが、そんな中 vim を使い続ける硬派な方向けのエントリーになります。

tnker/vim-sencha-util

https://github.com/tnker/vim-sencha-util

少し前にSencha用のプラグイン作りました。
GithubのREADMEはBingの翻訳頼りなので、英語おかしいかもですが気にしないように :(

Senchaで一番面倒なコード追う作業を比較的楽にしてくれちゃいます :)

設定方法

プラグインの中身の実装がほぼPythonで実装しているので、Python2.7以上(多分)が必須です。

インストールについては、みんな大好きNeoBundleでOKです

NeoBundle 'tnker/vim-sencha-util'

使い方

このプラグインを使うに当たって、Sencha Commandで生成されたプロジェクトが前提になるので注意してください :(

あとは、xtypeから該当ファイルへジャンプしたりする機能を利用する場合、Sencha Commandでビルドもしくは sencha app refresh などを行う必要があります。

プロジェクト直下の bootstrap.json を参照していたりするので

出来ることは下記の通り

  • 文字列定義で記述されているフルパスクラス名から該当クラスファイルへジャンプ
  • リテラル定義内のxtype名から該当クラスへジャンプ
  • リテラル定義内のhandler等に設定されている文字列関数名から該当関数までジャンプ
  • MVVMの構成に合わせてファイルをトグル切り替え

一番最後の機能については、ファイル名の命名規則しばったちょうザックリ機能なので、使えるかは微妙です(私は使ってますが

プラグインの機能を利用する際に使うのは、基本的に下記のコマンドだけになります

:SenchaParserReadCurrentLine

微妙といったファイルのトグル切り替えについては下記

: SenchaMVVMToggle

文字列定義で記述されているフルパスクラス名から該当クラスファイルへジャンプ

https://raw.githubusercontent.com/tnker/vim-sencha-util/master/src/images/jump_classpath.gif

リテラル定義内のhandler等に設定されている文字列関数名から該当関数までジャンプ

https://raw.githubusercontent.com/tnker/vim-sencha-util/master/src/images/jump_handler.gif

ExtJS6のclassicとmordenパッケージの名前解決も一応対応はしていますが、ちょっとまだバギーかもしれないです :(

リテラル定義内のxtype名から該当クラスへジャンプ

https://raw.githubusercontent.com/tnker/vim-sencha-util/master/src/images/jump_xtype.gif

MVVMの構成に合わせてファイルをトグル切り替え

https://raw.githubusercontent.com/tnker/vim-sencha-util/master/src/images/mvvm_toggle_file.gif

これについては、該当ファイルに設定されているViewControllerとViewModelの解析を行っているわけではなく、単純に該当ファイルと同ディレクトにおいてあるファイルを下記のルールで検索し、マッチするファイルがあればトグルで切り替えているだけになります。

対象ファイルが Hoge.js の場合
Hoge.js
HogeModel.js
HogeController.js
というような感じで、ModelとControllerが後ろについているか検索してるだけです

vimrc には下記みたいな感じで、マッピング追加しておいてもらえれば簡単に使えるので比較的便利です :)

map <silent> <C-@> :SenchaMVVMToggle<CR>
map <silent> <C-f> :SenchaParserReadCurrentLine<CR>

と、思いっきり 宣伝 紹介記事になってしまいましたが今回はこの辺で :)

今気づいたけど、12日分がまだ上がってなかった!
Unoくんガンバ!:(