Programmer's Note

コード読み書きの備忘録。

fireplace使用メモ

vimClojureの開発が便利になるプラグイン 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のプロンプトが出てくる。