VimでClojureを良い感じに使うためのアレ
が、変化が速く?日本語で見つかる情報が若干古く、Vimでの環境構築に苦労したのでメモ。 もちろん自分用のメモなのでMac向けな内容。 ここの内容を自分が実際にやった内容を思い出しながら書いた。
到達目標
- Leiningenでプロジェクト作ったり何やら
- VimClojureからNailgunに繋いでVim内でREPLとか特定の行を評価したり ←これがメイン
Leiningen
Homebrewで入る。簡単。
brew install leiningen
# プロジェクトを作る lein new hoge # 依存関係を解決済みなREPLを起動する lein repl # あとはへるぷ嫁 lein help
続いて、Leiningenのプラグインを入れる。
~/.lein/profiles.clj
を編集し、lein-tarsier
を読み込むようにしておく。
{:user {:plugins [[lein-tarsier "0.10.0"]]}}
lein deps
して依存関係を解決したらlein vimclojure
サブコマンドが使えるようになる。
これでLeiningen側の準備はOK!
Nailgun
Nailgunは、JVMを立ち上げっぱなしにしておくことでJVMを起動する時間を短縮してプログラムの実行時間を短くしてくれる君…という認識で合っているのかな。 怪しいけど、ひとまず「起動を速くしてくれる」機能が間違いなく備わっているはず。
Homebrewにパッケージがあるけど、これを使ってはならない。 VimClojureから接続するときに、なんか上手く繋がらない。 これでかなり時間を取られてしまった感あるのでご注意を。
VimClojureのリポジトリをダウンロードし、解凍しmake
する。
出力されたng
が実行可能であるか確認し、パスが通っている場所に放り込む。
(参考にしていたドキュメントでは作者氏のサイトへの直リンクが貼ってあったけど、それを転載するのはアレなのでリポジトリのリンクを貼ってある)
cd kotarak-vimclojure-22bbb523b401/client make mv ng ~/bin/
これでNailgunの準備はOK!
VimClojure
NeoBundleでVimClojure
を入れる。
NeoBundle 'VimClojure'
こんな感じで設定する。
let vimclojure#WantNailgun = 1 " Nailgunを要求する let vimclojure#NailgunClient = "ng" " Nailgunのクライアントコマンド let vimclojure#HighlightBuiltins = 1 " ビルトイン系をハイライト let vimclojure#ParenRainbow = 1 " カッコの色を階層に応じてカラフルにする
これでVimClojureの準備はOK!
いざ、試す
プロジェクトを作る。
lein new hoge
cd hoge
lein vimclojure
コマンドを実行して放置する。
ちなみに、下記の表示が出て止まる。
$ lein vimclojure
Starting VimClojure server on localhost, port 2113
Happy hacking!
この状態で、別のウィンドウにてVimを開く。 エラーが表示されなければ、Nailgunへ接続できているはず。
src/hoge/core.clj
を次のように変更し(末尾にfoo
を使うコードを追加しただけ)、おもむろに\ef
と入力する!
(\
は<Leader>
のこと)
(ns hoge.core) (defn foo "I don't do a whole lot." [x] (println x "Hello, World!")) (foo "hoge")
するとVimのウィンドウが2つにわかれ、上部にはこのような表示が出る。
これはsrc/hoge/core.clj
を評価した結果だ!
\ef
は、REPLでファイル全体を評価した結果を表示してくれる。
; Use \p to close this buffer! nil #'hoge.core/foo hoge Hello, World! nil
(foo "hoge")
の行にカーソルがある状態で\et
とすると、その行のみを評価することができる。
; Use \p to close this buffer! hoge Hello, World! nil
\sR
で、現在開いているファイルのネームスペースにてREPLがVim上で起動する!
普通のREPLと同じように評価したい式を入力してエンターで評価してくれる。
Clojure hoge.core=> (foo "hoge") hoge Hello, World! nil hoge.core=>
ちなみに、\sr
ではuser
ネームスペースにてREPLを起動する。
Clojure user=> (use 'hoge.core) nil user=> (foo "hoge") hoge Hello, World! nil user=>
この辺が使えればだいぶ捗るようになるはず。 デフォルトのマッピングが自分には合わないので、押しやすそうなマッピングに変更する(そのうち...)。
カーソルがある部分のドキュメントを検索したり、ソースを表示したり検索したり、他にもいろいろできる。
あとは:h vimclojure.txt
を見て頑張るぞい!