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

cake.vim最近の改善5つ

vim cakephp

最近、cake.vimのバージョンを2.10としてGitHubにpushしました。vimonlineにもアップしました。

そのなかの、2012年後半からやっていた改善5つを紹介します。

gfコマンドの縦分割版コマンドを追加した

ノーマルモードの時にgfと押すと、通常vimはカーソル配下に書かれたファイルパスを開こうとしますが、cake.vimではカーソル配下の記述からよしなに対象のクラスやファイルを開きます。そのあたりはcake.vim使い方まとめ - yuhei.kagayaに詳しく書いています。

gfの代わりに<C-w>fで上下分割、<C-w>gfでタブページ分割で開きますが、
gsと押して縦分割で開けるようにしました。

キーバインドを変更するには、.vimrcなどに次のように設定します。

" Ctrl-w gsで縦分割
let g:cakephp_keybind_vsplit_gf = '<C-w>gs'

gfでジャンプできるパターンが増えた

以下のように、gfでジャンプできるようになりました。

<?php
// 以下の行でgfと押すと、HogeController::fuga()へジャンプします。
array('controller' => 'Hoge', 'action' => 'fuga')
// 以下の行でgfと押すと、HogeController::admin_fuga()へジャンプします。
array('controller' => 'Hoge', 'action' => 'fuga', 'admin' => true)

アプリケーションのルーティングが一覧で定義してあるapp/config/routes.phpなどで便利です。

App::build()で追加したパスにジャンプできるようになった

アプリケーションディレクトリ直下に.cakeというファイルを作成し、次のようにJSON形式でビルドパスを書いておくと、
追加先のクラスにもジャンプできます。

{
  "build_path": {
    "models": [
      "/full/path/to/models/",
      "/next/full/path/to/models/"
    ],
    "components": [
      "/full/path/to/components/",
      "/next/full/path/to/components/"
    ],
    "helpers": [
      "/full/path/to/helpers/",
      "/next/full/path/to/helpers/"
    ]
  },
  "cake" : "/path/to/another_cakephp_core/"
}

.cakeではないファイル名にする場合には.vimrcなどで次のように設定します。

let g:cakephp_app_config_file = '.project'

CakePHPのコアディレクトリの場所はデフォルトでアプリケーションディレクトリと同じ階層にあるものとして認識しますが、そうでないパスにある場合などは.vimrcなどに次のように設定します。

let g:cakephp_core_path  = '/path/to/cakephp_core/'

アプリケーションごとに違う場所にCakePHPコアディレクトリがある場合には、g:cakephp_core_pathではなく上記の.cakeのように書いておくと便利です。


:Cviewコマンドを強化した

Cviewコマンドは、必ず第一引数にビュー名をとっていましたが(TABでビュー名の入力補完可能)、
第一引数を省略した場合、カーソルがあるカレント行に対応するビューファイルへジャンプするようになりました。

<?php
class ContentsController extends AppController {

  public function index() {

    // ここで:Cviewコマンドを引数なしで実行すると、indexビューへジャンプします

  }

gfでジャンプするときと同様、テーマビューを使っていて複数のジャンプ候補がある時には選択肢が出るので、
数字を選んでください。

:Cview 
Which file do you jump to?
(1): Contents/index.ctp, (2): Themed/admin/Contents/index.ctp: 

プラグイン読み込み時間の短縮

ソースを見直して、プラグインの設定値の初期化、コマンドの定義の記述以外をautoloadに寄せました。
結果、Vimの起動時にcake.vimの読み込みにかかる時間が短縮されて、約180%程度速度が向上しました。


以上でした。
次は入力系の機能、CakePHPのメソッドの入力補完を作ってみたいなー。