Edited at

Elixir初心者がVimで開発環境を整えてみた

More than 3 years have passed since last update.

Elixir初心者でわかってないことだらけなので、より良い設定が見つかればあとから変更予定です。

Elixir のインストール手順はこの記事では省略します。

最終更新: 2015/08/24


2015/08/24: Vimプラグイン化します

この記事にまとめていた内容についてですが、細かく書いていくときりがないので、

環境構築のサポートを目的とした Vim プラグインを用意し始めました。

基本的にはこのプラグインを入れれば、(主に自分が) いい感じに Elixir 開発できるようにしていくので、もしよろしければ使ってみてください。

ビビ可愛いよビビ。


使用するプラグイン

プラグインのインストールは NeoBundle なりなんなりで適当にインストールしてください。


キーマッピング

2015/08/23追記

パイプ |> はよく使うわりに入力しづらい気がしているので、>> で入力できるようにしました。


  • ftplugin/elixir.vim

imap >> \|><Space>


vim-elixir


  • シンタックスハイライトやインデントなどをよしなにしてくれるので、何も考えずにインストールします。

  • インストールするのみで設定は特になしです。


vim-quickrun

言わずと知れた quickrun です。

デフォルトでスクリプトの実行には対応していますが、

mix test も quickrun で実行できるようにしたいのでその設定を追加します。


quickrun で mix test

下記の例では <Leader>tmix test を実行するようにしています。

hook/cd/directory に mix.exs があるディレクトリを指定するため拙作のプラグインを使っていますが、同じことができれば別プラグインでも個別に関数定義でも問題ありません。

なお errorformat は適当に書いたので、使っていて不満があればその都度変更する予定です。


  • ftplugin/elixir.vim



    • 2015/08/23修正: CompileError系も検知できるようにした



let g:quickrun_config.mix_test = {

\ 'command' : 'mix',
\ 'exec' : 'mix test',
\ 'outputter' : 'quickfix',
\ 'errorformat' : '%E\ %#%n)\ %.%#,%C\ %#%f:%l,%Z%.%#stacktrace:,%C%m,%.%#(%.%#Error)\ %f:%l:\ %m,%-G%.%#',
\ 'hook/cd/directory': yacd#get_root_dir(expand('%:p:h'))
\ }

nnoremap <Leader>t :QuickRun mix_test<CR>


vim-watchdogs

シンタックスチェッカーでは Syntastic が Elixir をサポートしているようですが、

私は watchdogs 派なので、watchdogs でシンタックスチェックできるようにします。


シンタックスチェックの設定

Syntastic が内部で mix compile を実行してその結果をチェックしていたので、それをパクります。

2015/08/06修正: mix compile だとテストコードのシンタックスチェックができなかったので elixir での実行結果をチェックするよう修正しました。

hook/cd/directorymix test の箇所で説明したのと同様で、

errorformat も同様に適当に書いたものなので、不満がでてきたらあとで修正予定です。



  • g:quickrun_config を設定しているファイル

let g:quickrun_config = {

\ 'watchdogs_checker/elixir': {
\ 'command' : 'elixir',
\ 'exec' : '%c %s',
\ 'errorformat' : '**\ (%.%#Error)\ %f:%l:\ %m,%-G%.%#',
\ 'hook/cd/directory': yacd#get_root_dir(expand('%:p:h'))
\ },
\ 'elixir/watchdogs_checker': {
\ 'type' : 'watchdogs_checker/elixir',
\ }
\ }


vim-yacd

vimscriptの勉強用に作ったプラグインです。

以下のように root_names を定義しておくと

上記の例のように yacd#get_root_dir 関数で mix.exs のある親ディレクトリを検索してくれます。

let g:yacd#root_names = ['mix.exs', '.git']


neosnippet

2015/08/23追記


mix.exs でのお約束事を書きやすくする

mix new で生成されるデフォルトのテンプレートでは、Hex.pm に publish するには情報が足りません。

ですが、それを毎回コピペするのでは非効率なので、snippet を作りました。

これはまだ作って試し始めたばかりなので、もっと良い方法がみつかれば変更したいと思ってます。


  • snippet の置き場所を定義

let g:neosnippet#snippets_directory = $HOME . '/.vim/snippets'


  • ~/.vim/snippets/elixir.snip

snippet     project

abbr project
@url "https://github.com/FIXME/${1}"
@description """
FIXME
"""

def project do
[
app: :$1,
version: "0.0.1",
elixir: "~> 1.0",
name: "$1",
source_url: @url,
description: @description,
package: package,
deps: deps
]
end

snippet package
abbr package
defp package do
[
contributors: ["Your Name"],
licenses: ["MIT"],
links: %{"Github" => @url}
]
end


まとめ

ここまでの設定で実行、テスト、シンタックスチェックだけは実現できました。

それ以外については勉強を進める中で追加していき、この記事にも反映していけたらと思います。

こんな設定便利だよーというのがあれば教えていただけると幸いです。