fireplace使用メモ
vimでClojureの開発が便利になるプラグイン vim-fireplace を導入してみた。
インストール
参照したサイト: http://blog.ieknir.com/blog/beginning-clojure-with-vim/
自分はNeoBundleを使っているので、以下の2つのプラグインを.vimrcに追加しただけ。
call neobundle#begin(expand('~/.vim/bundle/')) ... NeoBundle 'tpope/vim-fireplace' NeoBundle 'tpope/vim-classpath' ... call neobundle#end()
fireplaceは裏でREPLと通信して、vimでエディットしながら、その場で式の評価などができるので、かなり便利だ。 とりあえずメモ。
vimでコマンド実行するまでの手順
先にREPL環境を立ち上げないとvimでのコマンド実行できない。
(1) leiningen を使ってプロジェクトを作成
$ lein new test
(2) プロジェクト直下に入りlein replを実行する
$ cd test
$ lein repl
(3) vimを立ち上げプロジェクト内のファイルを編集する
$ vim src/test/core.clj
関数の評価
vimのコマンドラインでREPLの機能を呼び出せる。これだけでかなり便利だ。
下記例は標準関数を使用しているが、自分が作成した関数でも可能だ。
その場合、一旦:w
などでファイル保存してから、関数を使用する必要がある。
vimのコマンド入力で:Eval
を使う。
:Eval (println "hello")
結果:
hello nil
関数のdocを見る
:Doc println
結果:
clojure.core/println ([& more]) Same as print followed by (newline)
ソースを見る
:Source println
結果:
(defn println "Same as print followed by (newline)" {:added "1.0" :static true} [& more] (binding [*print-readably* nil] (apply prn more)))
キーバインド
cpp
カーソルの行を評価する
例:
(println "hello")
のときに、括弧の中のどこにカーソルを置いてもよく、cpp
と打てば、hello
と実行結果が最下行のバッファに表示される。
cpp
は複数行にまたがる関数の実行にも使える。→cp)
の項目を参照。
cp)
カーソルの下の(
と対になる)
までの関数を実行する。
例えば
(loop [x 1] (if (> x 11) [x] (recur (+ x 1))))
があったときに、(loop ...
のはじめの(
にカーソルを合わせて、cp)
と打つと、結果として[12]
が最下行のバッファに表示される。
上記は(loop ...)
の最初の(
と最後の)
にカーソルを合わせて、cpp
と打っても、同じ結果になる。(こちらの方が簡単か)
cpr
カレントnamespaceに対して(require :reload)を実行する
例:
(defn boo [] (take 6 (iterate inc 0))) (boo)
としたエディットした直後だと、(boo)
にカーソルを置いてcpp
を打っても、シンボルbooが見つからないと怒られてしまう。
この場合に、
cpr
を打ってからcpp
と打つとうまく行く。
K
カーソルの下の関数の(doc ..)の結果を表示する
[d
カーソルの下の関数のソースを表示する
[C-d
カーソルの下の関数のソースに飛ぶ
cqp
REPLのプロンプトが出てくる。