Elixir初心者でわかってないことだらけなので、より良い設定が見つかればあとから変更予定です。
Elixir のインストール手順はこの記事では省略します。
最終更新: 2015/08/24
2015/08/24: Vimプラグイン化します
この記事にまとめていた内容についてですが、細かく書いていくときりがないので、
環境構築のサポートを目的とした Vim プラグインを用意し始めました。
基本的にはこのプラグインを入れれば、(主に自分が) いい感じに Elixir 開発できるようにしていくので、もしよろしければ使ってみてください。
ビビ可愛いよビビ。
使用するプラグイン
プラグインのインストールは NeoBundle なりなんなりで適当にインストールしてください。
- vim-elixir
- vim-quickrun
- vim-watchdogs
- vim-yacd
- 拙作プラグインですが利用は任意。理由は後述します。
- neosnippet
- neosnippet-snippets
キーマッピング
2015/08/23追記
パイプ |>
はよく使うわりに入力しづらい気がしているので、>>
で入力できるようにしました。
- ftplugin/elixir.vim
imap >> \|><Space>
vim-elixir
- シンタックスハイライトやインデントなどをよしなにしてくれるので、何も考えずにインストールします。
- インストールするのみで設定は特になしです。
vim-quickrun
言わずと知れた quickrun です。
デフォルトでスクリプトの実行には対応していますが、
mix test
も quickrun で実行できるようにしたいのでその設定を追加します。
quickrun で mix test
下記の例では <Leader>t
で mix 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/directory
は mix 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
まとめ
ここまでの設定で実行、テスト、シンタックスチェックだけは実現できました。
それ以外については勉強を進める中で追加していき、この記事にも反映していけたらと思います。
こんな設定便利だよーというのがあれば教えていただけると幸いです。