いっきのblog

技術とか色々

Jupyter Labをもっと快適にするためにvim Extensionを追加する

以前Jupyter Labを導入してから使い続けている。

kzkohashi.hatenablog.com

ただ、僕はエセvimmerなので若干使いにくいなーと思っていたところ、Jupyter Labには様々なExtention(拡張機能)を追加できるというのを知った。
ちなみにJupyterからこの機能はあったみたいで、有志たちによって様々なExtensionは開発されている。以下はGithub上にあるExtensionの中でtopic(話題?)になってるやつだと思う。

github.com

Jupyter LabにVimを導入する

以下のExtensionを追加する。

github.com

コマンドは簡単。

jupyter labextension install jupyterlab_vim
$ jupyter labextension install jupyterlab_vim
> npm pack jupyterlab_vim
jupyterlab_vim-0.8.0.tgz
Traceback (most recent call last):
  File "/usr/local/anaconda3/bin/jupyter-labextension", line 11, in <module>
    sys.exit(main())
  File "/usr/local/anaconda3/lib/python3.6/site-packages/jupyter_core/application.py", line 267, in launch_instance
    return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
  File "/usr/local/anaconda3/lib/python3.6/site-packages/traitlets/config/application.py", line 658, in launch_instance
    app.start()
  File "/usr/local/anaconda3/lib/python3.6/site-packages/jupyterlab/labextensions.py", line 168, in start
    super(LabExtensionApp, self).start()
  File "/usr/local/anaconda3/lib/python3.6/site-packages/jupyter_core/application.py", line 256, in start
    self.subapp.start()
  File "/usr/local/anaconda3/lib/python3.6/site-packages/jupyterlab/labextensions.py", line 58, in start
    for arg in self.extra_args]
  File "/usr/local/anaconda3/lib/python3.6/site-packages/jupyterlab/labextensions.py", line 58, in <listcomp>
    for arg in self.extra_args]
  File "/usr/local/anaconda3/lib/python3.6/site-packages/jupyterlab/commands.py", line 100, in install_extension
    return IOLoop.instance().run_sync(func)
  File "/usr/local/anaconda3/lib/python3.6/site-packages/tornado/ioloop.py", line 458, in run_sync
    return future_cell[0].result()
  File "/usr/local/anaconda3/lib/python3.6/site-packages/tornado/concurrent.py", line 238, in result
    raise_exc_info(self._exc_info)
  File "<string>", line 4, in raise_exc_info
  File "/usr/local/anaconda3/lib/python3.6/site-packages/tornado/gen.py", line 1069, in run
    yielded = self.gen.send(value)
  File "/usr/local/anaconda3/lib/python3.6/site-packages/jupyterlab/commands.py", line 158, in install_extension_async
    raise ValueError(msg)
ValueError:
"jupyterlab_vim@0.8.0" is not compatible with the current JupyterLab
Conflicting Dependencies:
JupyterLab              Extension            Package
>=0.10.0-0 <0.11.0-0    >=0.17.2-0 <0.18.0-0 @jupyterlab/application
>=0.10.0-0 <0.11.0-0    >=0.17.2-0 <0.18.0-0 @jupyterlab/notebook

簡単のはずエラー。バージョンの問題かな・・・。とりあえずJupyter Labのバージョン確認。

$jupyter --version
4.3.0
$ jupyter lab --version
0.27.0

最新は0.33系なのでバージョンあげよう。anacondaで色々試した結果、こんな感じでようやくできた。

# anacondaのバージョンアップ
$ conda update conda

# jupyterの再インストール
$ conda uninstall jupyter
$ conda install jupyter

# いろんな記事をみたら、あるissueに書かれてたのでやってみたが、影響したかはわからない
$ conda uninstall zeromq --force
$ conda install zeromq

# jupyter labの再インストール
# conda-forgeからインストールすることで新しくなる
$ conda uninstall jupyterlab
$ conda install -c conda-forge jupyterlab

# jupyter 5.3以下のおまじない
$ jupyter serverextension enable --py jupyterlab --sys-prefix

# バージョン確認
$ jupyter --version
4.4.0
$ jupyter lab --version
0.33.6

もう一度試す

$ jupyter labextension install jupyterlab_vim
...
Child html-webpack-plugin for "index.html":
     1 asset
    Entrypoint undefined = index.html
    [KTNU] ./node_modules/html-loader!./templates/partial.html 567 bytes {0} [built]
    [YuTi] (webpack)/buildin/module.js 497 bytes {0} [built]
    [aS2v] ./node_modules/html-webpack-plugin/lib/loader.js!./templates/template.html 1.22 KiB {0} [built]
    [yLpj] (webpack)/buildin/global.js 489 bytes {0} [built]
        + 1 hidden module
✨  Done in 81.59s.

だん!

Jupyter Labでvimを満喫する

vimらしい極太の線がでてきた。
僕はキーバインドはカスタマイズしてないので、このまま意識せずvimレた。やっぱいいな。慣れてる操作って。

f:id:kzkohashi:20180803222816p:plain

メリット

デメリット

  • printした際にでる表示項目は、デフォルトで一部しか見れないが、このExtensionを入れると全部見えてしまう
  • たまにinsert modeになるのが遅くて困る

終わりに

インストールに少し苦戦したが、一度できてしまえば他のExtensionも楽に追加できる。
vim以外にも面白そうなExtensionがあったので、もう少し試したら紹介しようと思う。