その他
    ホーム 技術発信 DoRuby [scala] [vim] vimでplayの開発環境を構築する
    [scala] [vim] vimでplayの開発環境を構築する
     

    [scala] [vim] vimでplayの開発環境を構築する

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    本記事の対象者

    • Railsの開発をvimでやっている。
    • vimのpluginとして、unite-railsを使っている。
    • Play(Scala)でもRailsと同じように開発したい人向け。

    ちなみに、unite-railsは、vimのuniteというプラグイン向けのプラグイン。

    よって、本記事は、vimのuniteを使っている人向け。

    やりたい事

    Playのプロジェクト配下のファイルを開いているときには、プロジェクト配下のソースの選択をuniteインターフェースで使いたい。

    対応の概要

    • 項目1:Play用のuniteインターフェースを作成する。
    • 項目2:Playのプロジェクト配下のファイルを開いているときには、ファイルタイプに「play」が含まれるようにする。
    • 項目3:ファイルタイプに「play」が含まれているときに、play用のunite-pluginのキーバインドを有効にする。

    【項目1】Play用のuniteインターフェースを作成する。

    unite-railsを参考にunite-playを作成する。

    参考までに、私が作成したunite-playの中は以下のようになっている。

    % tree unite-play
    unite-play/
    ├── README
    ├── autoload
    │   └── unite
    │       ├── kinds
    │       │   └── bundled_gem.vim
    │       └── sources
    │           ├── play
    │           │   ├── collector
    │           │   │   ├── config.vim
    │           │   │   ├── controller.vim
    │           │   │   ├── javascript.vim
    │           │   │   ├── model.vim
    │           │   │   ├── root.vim
    │           │   │   ├── route.vim
    │           │   │   ├── stylesheet.vim
    │           │   │   ├── test.vim
    │           │   │   └── view.vim
    │           │   └── helper.vim
    │           └── play.vim
    └── doc
        └── unite-play.txt
    
    7 directories, 14 files
    

    普通の開発者であれば、unite-railsの各ファイルの中身を参照すれば、簡単にplay用に修正できるはず。

    プロジェクトのルートディレクトリ配下のファイルを全て一覧かするものを追加している(root.vim)。root.vimの中身はこれ↓。

    function! unite#sources#play#collector#root#candidates(source)
      let target = a:source.source__play_root
      return unite#sources#play#helper#gather_candidates_file(target)
    endfunction
    

    controller.vimの中身はこれ↓。

    function! unite#sources#play#collector#controller#candidates(source)
      let target = a:source.source__play_root . '/app/controllers'
      return unite#sources#play#helper#gather_candidates_file(target)
    endfunction
    

    ここまで見れば、どういう感じで修正さればよいかは分かるはず。

    正しく修正することで、例えば、

      :Unite play/controller
    

    でapp/models配下のファイル一覧を表示させたりできる。

    後は、上記コマンドを適当なキーにバインドすればOK。

    【項目2】Playのプロジェクト配下のファイルを開いているときには、ファイルタイプに「play」が含まれるようにする。

    projectlocal」というvimのpluginを導入する(開発元のブログはこちら)。

    「.vimrc」に以下の設定を追加する。

      let g:projectlocal#projectfile = get(g:, 'projectlocal#projectfile', '.projectfile')
    

    そして、Playのプロジェクトのルートディレクトリに以下のファイルを置く。

    % cat .projectfile
    play
    

    この例では、「.projectfile」が置かれているディレクトリ配下のファイルを開くとファイルタイプに「play」が含まれるようになる。

    【項目3】ファイルタイプに「play」が含まれているときに、play用のunite-pluginのキーバインドを有効にする。

    「.vimrc」に以下のような設定を追加する。

    function! UnitePlaySetting()
        nnoremap <buffer><c-w><c-r>co :<c-u>Unite play/controller<cr>
        nnoremap <buffer><c-w><c-r>tp :<c-u>Unite play/root<cr>
    endfunction
    
    aug HogeAutoCmd
        au FileType *play* call UnitePlaySetting()
    aug END
    

    【おまけ】scalaのファイルを編集しているときには、ファイルタイプに「scala」が含まれるようにする。

    vim-scalaというvimプラグインを導入する。

    上記設定を全ておえ、当該プラグインが有効になれば、Playプロジェクト配下のscalaのファイルを開くと、ファイルタイプが「project.scala.play」となる。

    無事に、scalaとplayのファイルタイプが含まれている。