最近はNeoVimでElixirを書いていて、ちょっとずつ色々試していったが、最近は大分落ち着いてきたので棚卸しも含めてまとめてみる。
前提
elixir.nvimがNeoVimに依存しているのでNeoVimを利用する。
dein,deopleteは必須。
使っているplugin達
vim-elixir
とりあえず定番。シンタックスハイライト、インデントを解決してくれるので何も気にせずにいれている。
パイプを書いた時のインデントが気になるので、他のpluginも検討してみたい。
elixir.nvim
NeoVimに切り替えた要因はこのplugin。このplugin + deopleteで快適に補完できる。
いま見てみたらvim-ref
と連携もできるようになっていて着実に進化しているのも嬉しい。
vim-phoenix
model, controllerの移動が便利になるのと、EExのタグがvim-surround
使って楽に入力できる。
でも、テンプレートにslim(slime)使ってしまっているので、正直最近はあまり使ってない。
また、色々見ていたらphoenix.vimなるものを発見したので、こちらも試してみてよければアップデートしてみたい。
vim-slim
最近はtempleteにslim(slime)を使っているので、シンタックスハイライトに利用。
vim-watchdog
設定はこちらを参考にさせていただいた。
↑の設定ではelixir
を利用していたが、PhoenixFrameworkを使っているとuse App.Web, :model
のところでエラーを拾ってしまって見づらい。そのため、自分はmix compile
を利用している。
以前はSyntastic
を利用していたが、コードが増えてくると保存のたびにかなり待たされるようになってしまったので、vim-watchdog
に変更した。
neosnippet
vim-phoenixでultisnips用のsnippetが定義されていたのが、自分はneosnippetを使っているので書き換えた。
一つだけPhoenixFrameworkでdebug用にIEx.pry
を呼び出すためのsnippetを追加した。IEx.pry
は多用しているので自分的には一番利用頻度が高い。
snippet pipe
abbr pipeline
options head
pipeline :${1:browser} do
${2}
end
snippet pipe
abbr pipe_through
options head
pipe_through :${1:browser}
snippet get
abbr GET route
options head
get "${1:/}", ${2:Project}Controller, :${3:index}
snippet post
abbr POST route
options head
post "${1:/}", ${2:Project}Controller, :${3:create}
snippet put
abbr PUT route
options head
put "${1:/}", ${2:Project}Controller, :${3:update}
snippet delete
abbr DELETE route
options head
delete "${1:/}", ${2:Project}Controller, :${3:destroy}
snippet res
abbr resources route
options head
resources "/${1:projects}", ${2:Project}Controller
snippet res
abbr resource route
options head
resource "/${1:project}", ${2:Project}Controller
snippet scope
abbr routing scope
options head
scope "${1:/}", ${2:MyApp} do
$0
end
snippet socket
abbr socket route
options head
socket "/${1:ws}", ${2:MyApp} do
$0
end
snippet channel
abbr socket channel route
options head
channel "${1:notifications}", ${2:Notification}Channel
snippet redirect
abbr redirect(conn, to:...)
options head
redirect(${1:${2:conn}, }to: ${3:${4:project}_path(${5:conn}, :${6:index})})
snippet render
abbr render(conn, view, assigns)
options head
render ${1:conn}, "${2:view}", ${3:#:content}: ${0}
snippet dbg
abbr require IEx; IEx.pry
options head
require IEx; IEx.pry
ctags
ctagsはここの設定をそのまま利用。
最初はあまり使ってなかったが、コードを読むときには重宝する(特にライブラリ読まなきゃいけない時とか・・・)。
tagsファイルにJavaScriptの定義も混ざってしまっているので、設定しなおしたい。
その他
imap >> \|><Space>
Elixirのパイプ|>
を>
2回押しで入力できるようにするkey map。こちらを参考にさせていただいた。
今やこれなしではElixir書けません。と言っても過言ではないほど自分の生産効率を向上させている。
普通に打つとElixirのパイプ書きにくい・・
set foldmethod=indent
Elixirのコードは折り畳みうまくいかないなと思って調べたらここに書いてあった。
コードを読む時間が増えてくると、必要な箇所だけ読みたくなってくるので、折り畳みされていると非常にコードを読むのが捗る。
まとめ
書いていたらあれもこれもと入れたくなったのと、ここ直したかったんだとかが見つかって、自分の棚卸しができた。
以前ctags用のpluginを探したがなかなかしっくりくるものがなかった。もう一回色々試してみたい。