把Jupyter Notebook配置成Coding神器

Posted by resuly on November 3, 2017

Anaconda装完以后,Jupyter Notebook给python开发效率带来了几何级的提升。不论是代码测试、Markdown、管理、分享等功能,都让人眼前一亮。不过比起传统的编辑器,还是有很多让人不爽的地方。比如在Windows平台下默认的Jupyter Notebook字体是宋体,看起来让人抓狂。比如写代码时候,没有Sublime Text中的快捷键、自动格式化等操作。总之用起来还不够顺畅,好像少点什么。本文主要介绍如何在安装好Jupyter之后,进一步的配置它,让它用起来更加得心应手。

修改字体+配置Sublime Text快捷键

第一步当然是修改字体了,由于强迫症的原因,我没法在中英文都是宋体的情况下编程。

首先安装jupyterthemes,并配置默认主题。安装命令如下:

# install jupyterthemes

pip install jupyterthemes

# 配置默认主题

jt -r

重置完了默认主题之后,你可以发现这个目录已经被创建:C:/Users/用户名/.jupyter/custom

Jupyter每次运行的时候,都会从这个目录自动加载两个文件custom.css和custom.js。从名字就可以看出来,这两个个性化的文件可以写入个性化的配置内容。所以我们在css中修改字体样式、界面风格等等。在js文件中可以加入快捷键等个性化设置。

如果你不想了解具体内容,可以直接下载我配置好的文件进行替换,字体和快捷键设置就大功告成了。下载 custom.zip

Sublime Text快捷键有哪些好处,如何使用请继续往下看。

修改字体

在custom.css中写入如下内容:

.introspection, .input_prompt,.output_prompt, .output pre, .CodeMirror pre {
    font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
    font-size: 15px;
    line-height: 22px;
}

熟悉css的同学应该可以看出,这段代码主要是把标题、代码内容等区域的css样式改了。你也可以把其中的font-family替换成自己喜欢的字体,比如微软雅黑:

font-family: "Microsoft Yahei";

刷新一下你的撸码页面,字体是不是看起来顺眼多了?

Sublime Text快捷键

修改方法很简单,在上述custom.js中写入如下内容,刷新即可(参考文献):

require(["codemirror/keymap/sublime", "notebook/js/cell", "base/js/namespace"],
    function(sublime_keymap, cell, IPython) {
        cell.Cell.options_default.cm_config.keyMap = 'sublime';
        var cells = IPython.notebook.get_cells();
        for(var cl=0; cl< cells.length ; cl++){
            cells[cl].code_mirror.setOption('keyMap', 'sublime');
        }
    }
);

Sublime Text编辑器中内置了多种快捷键,可以很方便的进行代码编辑。 我结合日常使用习惯,把Jupyter中的常用快捷键进行了整理,并录制了GIF演示图。(手机浏览请左右滑动下面的表格)

快捷键 作用 演示
Ctrl+ L 选择一行(连续选取多行)
Ctrl+ D 选择当前变量(或重复选择并编辑)
Ctrl+ Shift+ M 选择括号里面的内容
Ctrl+ Shift+ K
Ctrl+ X
删除一行
Ctrl+ K K 删除本行光标后的所有内容
Ctrl+ Shift+ D 快速复制一行
Ctrl+ K U 大写
Ctrl+ K L 小写
Ctrl+ / 注释
Ctrl+ Tab 代码提示,可以连续多按

安装Jupyter拓展插件

除了以上功能,我个人还比较偏向代码折叠,自动整理对齐等功能。jupyter_contrib_nbextensions正是为了解决这样的个性化需求所提供的一款插件,安装代码如下:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

近期 jupyter notebook 更新,默认使用 jupyterlab 中的组件导致一些 js 文件无法加载,可以通过降级来解决这个问题:

pip install notebook==6.1.5

之后还需安装 ipywidgets

pip install ipywidgets

重启 jupyter server,就可以看见插件管理的Tab了。如果看不见,请检查自己电脑上是不是有多个python环境,请把插件安装到和jupyter一致的python环境中。

代码折叠、标题折叠

把Codefolding和Collapsible Headings打开即可:

自动整理代码

首先安装yapf,然后把Code prettify打开即可,点击标题可以自己设置快捷键。

pip install yapf

启用后可以按快捷键,或者点锤子图标进行代码自动整理。比如锤一下下面这杂乱不堪的代码: 细心的读者可能会发现,其实图标用的是Font Awesome字体,在配置中修改icon的样式就可以修改对应的图标了,比如把锤子变成对号,把legal改成check就可以:fa-legal -> fa-check。访问http://fontawesome.io/icons/,查看所有可以用的图标。

烦人的 comment indent 问题

默认的 comment 会在当前一行的开始添加一个 #,不支持和代码一起缩进,和绝大多数的IDE都不一样,非常烦人和反人类。这个问题的讨论可以查看一下链接:

https://github.com/jupyter/notebook/issues/954

解决方式是开启 Comment/Uncomment Hotkey 这个插件,注意还是没法覆盖默认的 Crtl + / 按键,建议改成 Alt + / 来进行可以缩进的注释。

其实还有很多其他功能可以使用,希望大家都能够利用Jupyter Notebook提高自己的开发效率。欢迎留言,一起探索交流。