Emacs からjupyter notebookを使う方法をまとめます
jupyter notebookは
などで非常に便利ですが、これらがすべて Emacs 上で行えるようになります
Emacs + jupyer + python の組み合わせのみ説明しますが,同じ方法で R や haskell も動作します
インストール
EIN( Emacs IPython Notebookの略)を使います
MELPAからインストールできます
M-x package-refresh-package M-x package-install ein
インストール出来ない場合は MELPAを参照するように ~/.emacs などに以下の設定を1行加えます
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
カスタマイズ
ここが重要です.elpyと連携することで補完入力が有効になります
(use-package elpy :config (setq elpy-rpc-backend "jedi") ;; python-jedi is required (setq elpy-rpc-python-command "python3") (setq python-shell-interpreter "python3") ) (use-package ein :config (setq ein:output-area-inlined-images t) ;; Use elpy for auto completion (elpy-enable) :bind ( ("C-<return>" . ein:worksheet-execute-cell-km) ("C-S-<up>" . ein:worksheet-move-cell-up-km) ("C-S-<down>" . ein:worksheet-move-cell-down-km) :map elpy-mode-map ("C-<return>" . ein:worksheet-execute-cell-km)))
動作の仕組みとしては
- ein は polymode を使っている
- jupyter のセルの部分は elpy-mode それ以外のところは ein-mode で動作している
- セルでのキーイベントは最初に elpy に渡り,elpyが無視したイベントが ein-mode に渡る
となります
ここで デフォルトの elpy は "C-<return>" をコマンドの実行に割り当てているので use-package の :bind で ein:worksheet-execute-cell-km に割り当てなおしています
elpyは初期設定が必要なので,初めてeplyを使う場合は
M-x elpy-config
を一度実行して,手動で各種設定を済ませておきます
なお補完入力については
- 2015年頃は company.el や auto-complete.el との連携を独自に実装していた
- 2020年頃に 独自実装は廃止, elpy のような外部実装に丸投げする方針になった
ということのようです
また,作者曰く,lsp-mode との連携は考えてない,ということです
(setq ein:use-auto-complete t)
といった設定は、もうサポートされていません
使い方:基本
基本操作
セルのフォーカスを移動 | Ctrl +<down> Ctrl + <up> |
|
セルを実行 | Ctrl+enter | |
セルを実行 | Alt+enter | 実行後,カーソルは次のセルに移動 |
セルを移動 | Ctrl+Shift +<down> Ctrl+Shift + <up> |
|
スクラッチシート | C-c C-/ | nbextension の scratchpad に相当. セルを作成せずにコードが実行できます |
その他
jupyter を終了 | M-x ein:stop |
参考:デフォルトのキーマップ
Key | binding | 説明/補足 |
C-<down> | ein:worksheet-goto-next-input-km | 一つ上のセルに移動 |
C-<up> | ein:worksheet-goto-prev-input-km | 一つ下のセルに移動 |
M-S-<return> | ein:worksheet-execute-cell-and-insert-below-km | |
M-<down> | ein:worksheet-not-move-cell-down-km | |
M-<up> | ein:worksheet-not-move-cell-up-km | |
C-x C-s | ein:notebook-save-notebook-command-km | |
C-x C-w | ein:notebook-rename-command-km | |
M-RET | ein:worksheet-execute-cell-and-goto-next-km | |
M-, | ein:pytools-jump-back-command | |
M-. | ein:pytools-jump-to-source-command | |
C-c C-a | ein:worksheet-insert-cell-above-km | 一つ上に新規セルを挿入 |
C-c C-b | ein:worksheet-insert-cell-below-km | 一つ下に新規セルを挿入 |
C-c C-c | ein:worksheet-execute-cell-km | セルを実行 |
C-u C-c C-c | ein:worksheet-execute-all-cells | すべてのセルを実行 |
C-c C-e | ein:worksheet-toggle-output-km | |
C-c C-f | ein:file-open-km | |
C-c C-k | ein:worksheet-kill-cell-km | |
C-c C-l | ein:worksheet-clear-output-km | |
C-c RET | ein:worksheet-merge-cell-km | |
C-c C-n | ein:worksheet-goto-next-input-km | |
C-c C-o | ein:notebook-open-km | |
C-c C-p | ein:worksheet-goto-prev-input-km | |
C-c C-q | ein:notebook-kill-kernel-then-close-command-km | |
C-c C-r | ein:notebook-reconnect-session-command-km | |
C-c C-s | ein:worksheet-split-cell-at-point-km | |
C-c C-t | ein:worksheet-toggle-cell-type-km | セルの種類を切り替える |
C-c C-u | ein:worksheet-change-cell-type-km | |
C-c C-v | ein:worksheet-set-output-visibility-all-km | |
C-c C-w | ein:worksheet-copy-cell-km | |
C-c C-y | ein:worksheet-yank-cell-km | |
C-c C-z | ein:notebook-kernel-interrupt-command-km | |
C-c C-S-l | ein:worksheet-clear-all-output-km | |
C-c C-# | ein:notebook-close-km | |
C-c C-$ | ein:tb-show-km | |
C-c C-/ | ein:notebook-scratchsheet-open-km | |
C-c C-; | ein:shared-output-show-code-cell-at-point-km | |
C-c <down> | ein:worksheet-move-cell-down-km | |
C-c <up> | ein:worksheet-move-cell-up-km | |
C-c C-x C-r | ein:notebook-restart-session-command-km | |
C-c M-w | ein:worksheet-copy-cell-km |