Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

21
Before LISPs Just Part of the Past #4 vim as a Clojure front end

description

A report about vim plugins for clojurians.

Transcript of Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

Page 1: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

BeforeLISPs

Just Part of the Past

〜 #4 vim as a Clojure front end 〜

Page 2: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

プログラミング Clojure第2版!

Page 3: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

Lisp Meet Up #6Clojure!!

Page 4: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

プログラミング Clojure第2版でたし

We Vimmers needVim as aClojure

front end!!

Page 5: Before LISPs Just Part of the Past ~#4 vim as a clojure 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

Page 6: Before LISPs Just Part of the Past ~#4 vim as a clojure 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

#1 〜 vim as a Lisp front end 〜を参照

Page 7: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

Before Vimming with Clojure ...

● Leiningen– project manager for Clojure– 1.x vs 2.x

● NeoBundle– package manager for Vim

Page 8: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

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が入る

Page 9: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

Leiningen● lein repl● lein new foo● lein deps

– 依存関係はproject.cljや

~/.lein/profiles.cljに記述する

– これの書き方も1.xと2.xで全然違う

Page 10: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

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

Page 11: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

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は必要

Page 12: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

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/

Page 13: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

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

Page 14: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

with VimClojure

● lein new foo● cd foo● ng-server● vim src/foo/scratch.clj

– ターミナル2つ立ち上げるか、screen(など)を使う

Page 15: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

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.

Page 16: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

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

● インストールが素晴らしく簡単

Page 17: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

Setup fireplace● NeoBundleでインストール

– NeoBundle 'git://github.com/tpope/vim-fireplace.git'

– :NeoBundleInstall● プロジェクトディレクトリで、

– lein repl– vim src/foo/scratch.clj– ターミナルを2つ立ち上げるか、screen(など)

Page 18: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

Key bindings● cpp : 式の評価

● cqp : Quasi-REPLを開く

● cqc : 入力履歴付きQuasi-REPLを開く

– command-line-window● c!! : 式を評価して、評価結果で置き換える

– これはすごく面白い

● トップレベルフォームの評価をするキーバインドはデフォルトでは定義されていない

– :Evalコマンドがこれに相当するので、適当にmapしよう

● C-x C-o : オムニ補完、引数リストも一緒に表示してくれる

Page 19: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

Quasi-REPL● 入出力履歴の表示を取り去った感じのREPLバッファ

● プロンプトは表示されるが、うっかり削除してしまうことはない● これまでの入出力内容もうっかり編集してしまうことはない● 入力履歴は表示させられるし、使うこともできる● 過去の出力も表示させることはできる

– 入力エリアとは違う場所に表示される

– :Last, :lprevious, :lnext

Page 20: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

slimv.vim● Vim用SWANKクライアント

● swank-clojureプロジェクトは既にdeprecated– 後継がnREPL

● Leiningen 2.xではインストールがうまくいかず、調査を断念

– 情報求ム

● 公式には、Leiningen 1.xでインストールすることを推奨している

Page 21: Before LISPs Just Part of the Past ~#4 vim as a clojure front end ~

補足● 今回の手順は、

– Linux Mint 14 Xfce– Mac OS 10.8.4で動作を確認した

● MacではbrewでインストールしたLeiningenでも特に問題は起きなかった