EmacsでiPython notebookを使う(EIN / Emacs iPython notebook)

iPython notebook、使ってますか。便利ですね。

Emacs以外の開発環境が増えるのが許せないハードコアEmacserのために、EmacsからiPython notebookの編集・実行ができるEmacs iPython Notebook(EIN)をご紹介。

公式サイト

Emacs上でiPython Notebookに接続して、Emacs上で直接iPython notebookの作成・セルの編集、実行、グラフ表示までできるスグレモノです。

先に注意:まだそこそこ不安定なので、大切なNotebookの編集はやめておいたほうがよい

インストール

Emacsにて

M-x el-get-install

einを選択して、インストール。

自前でコンパイルなど、そのほかの方法は公式サイトを確認のこと。

かんたんな使い方。

ipython notebookサーバーはあらかじめ起動しておいて、Emacsから

M-x ein:notebooklist-open

で、ポートを選択して接続。

以下のようにノートブック一覧がバッファに表示される。

カーソルを"New NoteBook"に合わせて新しいNotebookが開かれる。

サンプル

f:id:nullbyte:20150625024246p:plain

こんな感じ。%matplotlib inline やっておけば、グラフも出せます。いいね!・・・・でもEmacsで編集した後、ブラウザで開くとグラフが表示されないので、その場合はブラウザ側で再度セルを実行する必要があり。

主なショートカットキー

  • C-c C-c :選択したセルを実行
  • C-c C-z :インタラプト

  • C-c C-n :次のセルへ

  • C-c C-p :前のセルへ

  • C-c C-a : 上にセルを追加

  • C-c C-b : 下にセルを追加

  • C-c C-s :セルを分割

  • C-c C-m :セルをマージ

  • C-c C-t セルのタイプ(Python, MarkDown, Raw)切り替え

ちなみにM-n, M-pにwordsheet-(next|prev)-input-historyとかいうコマンドが割り当てられていて、 簡単にセルの内容が実行履歴で入れ替えられてしまうので、 私は以下のような設定を.emacsに書いてキーバインドを前後セルの移動と置き換えた。おすすめ。

(eval-after-load 'ein-notebook
  '(progn
     (define-key ein:notebook-mode-map (kbd "M-n")
       'ein:worksheet-goto-next-input)
     (define-key ein:notebook-mode-map (kbd "M-p")
       'ein:worksheet-goto-prev-input)
     (define-key ein:notebook-mode-map (kbd "C-c C-n")
       'ein:worksheet-next-input-history)
     (define-key ein:notebook-mode-map (kbd "C-c C-p")
       'ein:worksheet-prev-input-history))) 

注意したいこと。

  • 重要 ノートブックを保存しないままEmacsを終了させて、確認ダイアログで"保存"を選ぶとnotebookが破壊される事があるので、ちゃんと手動で保存しておきましょう。
  • まだPython以外の他言語カーネルには対応してないっぽい。試してみたところ、あらかじめIJulia用で作っておいたNotebookの編集はできてJuliaセルの実行もできるけど、現在EIN上でカーネルの種類を選んだりはできない。多分。
  • カーネルのリスタート(M-x ein:notebook-restart-kernel-command)がうまくいかない。切断後再接続できない。そういうときは一度保存して閉じ、 ノートブック一覧画面で[STOP}を叩いて終了させてから再度開いている。バグだと思う。

・・・色々あるけど、かなり便利なので、ぜひ試してほしい。