before lisps just part of the past ~#4 vim as a clojure front end ~
DESCRIPTION
A report about vim plugins for clojurians.TRANSCRIPT
BeforeLISPs
Just Part of the Past
〜 #4 vim as a Clojure front end 〜
プログラミング Clojure第2版!
Lisp Meet Up #6Clojure!!
プログラミング Clojure第2版でたし
We Vimmers needVim as aClojure
front end!!
Vim as a Clojure front end
● Send whole buffer to interpreter● slime.vim - screen -X stuff● slimv - a SWANK client for vim● VimClojure - Clojure IDE for Vim● fireplace.vim - nREPL client for Vim
Vim as a Clojure front end
● Send whole buffer to interpreter● slime.vim - screen -X stuff● slimv - a SWANK client for vim● VimClojure - Clojure IDE for Vim● fireplace.vim - nREPL client for Vim
#1 〜 vim as a Lisp front end 〜を参照
Before Vimming with Clojure ...
● Leiningen– project manager for Clojure– 1.x vs 2.x
● NeoBundle– package manager for Vim
Leiningen● version 1.xと2.xで全然違い、Web上の情報は1.xが圧倒的に多い
– lein plugin (1.x) vs profiles clause (2.x)– 1.xは1.4以降のClojureを使うのに手間取る
● 以下のように公式Githubからスクリプトを入手して実行すれば、2.xが簡単に入る
– cd ~/bin # binにPATHが通っていると仮定
– curl -O https://raw.github.com/technomancy/leiningen/stable/bin/lein– chmod 755 lein– ./lein– 2013/06/27現在、Leinigen 2.2.0、Clojure 1.5.1が入る
Leiningen● lein repl● lein new foo● lein deps
– 依存関係はproject.cljや
~/.lein/profiles.cljに記述する
– これの書き方も1.xと2.xで全然違う
NeoBundle● Vim plugin用のパッケージマネージャ
– 作者が日本人(Shougoさん)なので日本語情報が見つけやすい、と思う
– pathogen, Vundle● インストール:下記のポストが大変参考になります
– http://qiita.com/hrsh7th@github/items/766543bd2ef565bd1ee9● .vimrcに管理対象をベタ書きする
– これは個人的に落ち着かないので、managed-packages.vimにまとめて書い
て、~/.vimrcでsourceしてます
– i.e.) source $HOME/.vim/bundle/managed-packages.vim
VimClojure● Programming Clojure 2ndでも名前が挙がっているVim用のClojure開発環境
– indent– syntax highlight– code completion– REPL (requires Nailgun & Nailgun client)
● Webの情報はインストールにLeiningenを使う物がほとんどで、1.xが前提
● 下記のポストで紹介されているやり方は2.xでも大丈夫
– http://naleid.com/blog/2011/12/19/getting-a-clojure-repl-in-vim-with-vimclojure-nailgun-and-leiningen/
– ただし、Leiningenは必要
Setup VimClojure● slimvを利用している場合はまずClojureソースでslimvをオフにする
– let g:slimv_disable_clojure = 1● NeoBundleを用いてVimClojureをインストール
– managed-packages.vimに
NeoBundle 'vim-scripts/VimClojure.git'– vimを起動して:NeoBundleInstall
● VimClojure用Nailgunクライアントをインストール
– hg clone https://bitbucket.org/kotarak/vimclojure– cd vimclojure/client– make– cp ng ~/bin/
Setup VimClojure (cont)● Nailgunサーバを手動でインストール
– http://clojars.org/repo/vimclojure/server/ から最新版のjarを取ってきて~/lib/vimclojure/に配置
– ここではserver-2.3.6.jarと仮定
● .bashrcに以下の内容を追加
– export VIMCLOJURE_SERVER_JAR="$HOME/lib/vimclojure/server-2.3.6.jar"● Nailgun起動用スクリプトを作成
– ~/bin/ng-serverを以下の内容で作成し、実行可能にする
– #! /bin/bashLEIN_CLASSPATH=$(lein classpath)NG_CLASSPATH="$VIMCLOJURE_SERVER_JAR:$LEIN_CLASSPATH:$CLASSPATH"java -server -cp "$NG_CLASSPATH" vimclojure.nailgun.NGServer
● .vimrcに以下の内容を追加
– let vimclojure#WantNailgun = 1– let vimclojure#NailgunClient = $HOME . '/bin/ng'– let g:vimclojure#HighlightBuiltins = 1
with VimClojure
● lein new foo● cd foo● ng-server● vim src/foo/scratch.clj
– ターミナル2つ立ち上げるか、screen(など)を使う
Key bindings● \et : EvalTopLevel● \eb : EvalBlock (選択範囲の評価)● \ef : EvalFile● \m1 : macroexpand-1● \sr : REPLバッファ
● C-x C-o : オムニ補完、REPLバッファのみ?
● slimvに慣れているので2ストロークを定義してみた
– au Filetype clojure nmap <LocalLeader>d <Plug>ClojureEvalToplevel.– au Filetype clojure vmap <LocalLeader>r <Plug>ClojureEvalBlock.– au Filetype clojure nmap <LocalLeader>b <Plug>ClojureEvalFile.– au Filetype clojure nmap <LocalLeader>1 <Plug>ClojureMacroExpand1.
fireplace● Vim用nREPLクライアント
– 対話環境と補完を提供する
● ただし、従来のREPLバッファのように、REPLバッファを編集することはできない
– indentやsyntax highlightは提供しない
● vim-clojure-staticを使うといいらしい
● VimClojureの作者Meikel氏が「これからはfireplaceじゃないかな」と言っ
てたりする
– On the state of VimClojurehttps://groups.google.com/forum/?fromgroups=#!topic/vimclojure/B-UU8qctd5A
● インストールが素晴らしく簡単
Setup fireplace● NeoBundleでインストール
– NeoBundle 'git://github.com/tpope/vim-fireplace.git'
– :NeoBundleInstall● プロジェクトディレクトリで、
– lein repl– vim src/foo/scratch.clj– ターミナルを2つ立ち上げるか、screen(など)
Key bindings● cpp : 式の評価
● cqp : Quasi-REPLを開く
● cqc : 入力履歴付きQuasi-REPLを開く
– command-line-window● c!! : 式を評価して、評価結果で置き換える
– これはすごく面白い
● トップレベルフォームの評価をするキーバインドはデフォルトでは定義されていない
– :Evalコマンドがこれに相当するので、適当にmapしよう
● C-x C-o : オムニ補完、引数リストも一緒に表示してくれる
Quasi-REPL● 入出力履歴の表示を取り去った感じのREPLバッファ
● プロンプトは表示されるが、うっかり削除してしまうことはない● これまでの入出力内容もうっかり編集してしまうことはない● 入力履歴は表示させられるし、使うこともできる● 過去の出力も表示させることはできる
– 入力エリアとは違う場所に表示される
– :Last, :lprevious, :lnext
slimv.vim● Vim用SWANKクライアント
● swank-clojureプロジェクトは既にdeprecated– 後継がnREPL
● Leiningen 2.xではインストールがうまくいかず、調査を断念
– 情報求ム
● 公式には、Leiningen 1.xでインストールすることを推奨している
補足● 今回の手順は、
– Linux Mint 14 Xfce– Mac OS 10.8.4で動作を確認した
● MacではbrewでインストールしたLeiningenでも特に問題は起きなかった