まえがき
タイトル通りのことをしたい.弊社の初期の開発環境は何も入っておらず,無意識にjjが表示されがちである(vimあるあるだと思っている).Jupyterでも基本的なvimの環境が入っていることが個人的に望ましいため,これを設定する手順を記述する.なお,会社の環境はlinuxなのだが,クリーンインストールした自宅のPCで記事を書いているため,macOSについてである.ただし,大体同じなハズ.
環境・準備
- MacOS Catalina 10.15.4
- python 3.6.5 (pyenv等はお好みで)
- git
方法
jupyter-vim-binding の導入
基本的にこれでいいと思っている.他にもあると思うが,今回はこれで書く.
まず,pipでjupyter notebookをインストールしておく.どうせ使うのでpandasも.
pip install jupyter
pip install pandas
脳死でgithubに書いてある手順をふむ.
mkdir -p $(jupyter --data-dir)/nbextensions
cd $(jupyter --data-dir)/nbextensions
git clone https://github.com/lambdalisue/jupyter-vim-binding vim_binding
jupyter nbextension enable vim_binding/vim_binding
とりあえず現時点でjupyterを開くと以下のようなものが出てくる.
cd
jupyter notebook
これはホームディレクトリだが,とりあえず右上のNewからpython3を選択して開くと,
こんなのがでて,Untitled.ipynbが作成される.クリーム色のときnormalモードであり,iでインサートモードに入れる.詳細は本家ページをみるべし.これ.
設定をしないとjjでインサートモードを抜けられなくて腹が立つので,キーマッピングを編集する.
キーマッピングの編集
本記事ではnvimで編集する(適当なエディタでどうぞ).~/.jupyterにjupyterの設定がおかれるっぽい.その中のcustom以下にcustom.jsを作成または編集する.
mkdir -p ~/.juputer/custom/
nvim ~/.jupyter/custom/custom.js
エディターが開いたら,以下を保存する.これは公式に書いてあった設定のうち,jjでノーマルモードに戻る設定以外を削除したもの.
// Configure CodeMirror Keymap
require([
'nbextensions/vim_binding/vim_binding', // depends your installation
], function() {
CodeMirror.Vim.map("jj", "<Esc>", "insert"); // jj setting!
});
// Configure Jupyter Keymap
require([
'nbextensions/vim_binding/vim_binding',
'base/js/namespace',
], function(vim_binding, ns) {
// Add post callback
vim_binding.on_ready_callbacks.push(function(){
var km = ns.keyboard_manager;
// Allow Ctrl-2 to change the cell mode into Markdown in Vim normal mode
km.edit_shortcuts.add_shortcut('ctrl-2', 'vim-binding:change-cell-to-markdown', true);
// Update Help
km.edit_shortcuts.events.trigger('rebuild.QuickHelp');
});
});
これでかなり気持ちよく編集ができるようになる.使ってればわかってくるはず.
最後にGifアニメーションを貼っておきます.
おわりに
会社の環境だと,セキュリティの関係で何かとインストールがしづらいが,gitは行けたのでなんとかなった.また別の環境になったときはとりあえずこの記事のようにやるようにする.vimmerにとっては少なくともjkhlの移動は死活問題なので,jupyter-vim-bindingだけでも設定するとよいと思う.