同样,本文也不会过多介绍Emacs使用的基础知识。学习Emacs最容易的方法,就是通过其自带的教程。本文介绍的内容并不要求你知道如何使用Emacs;相反,本文的每一部分讲述的都是你学习基础知识后可以使用的。
你可以使用方向键将光标移动到标有“Emacs Tutorial”字样的地方,然后按回车键,就可以打开自带教程。然后,你将会看到下面这段话:
插件包(packages)可以对Emacs进行自定义,需要从不同的代码仓库获取。其中,最主要的Emacs插件包仓库是 MELPA 仓库。本文中提到的所有插件包都将从该仓库获取并安装。
首先,下面是一个插件包安装示例代码,其中安装了一个主题插件。
配置示例代码的第一部分是 ;; INSTALL PACKAGES ,安装了 better-defaults 和 material-theme 共两个插件包。 better-defaults 插件集合了一系列对Emacs默认配置的修改,为我们开始进一步自定义奠定了良好的基础。 material-theme 插件则提供了一组自定义的样式。
主题插件中,我个人更喜欢的就是这个 material-theme 插件,所以本文中我们将一直使用这个插件。
第二部分则是 ;; BASIC CUSTOMIZATION (基本自定义)。
全局启用意味着这个功能对于Emacs打开的所有缓冲区(buffers)都适用。所以,如果你打开了Python文件、markdown文件或者是纯文本文件,它们都将显示行号。你还可以根据不同的模式(mode)启用不同的功能,——例如,python模式、markdown模式和纯文本模式。稍后我们将Emacs配置为Python IDE时还会讲到。
下面这张图展示了一些Emacs本身自带的基础功能——包括简单的文件检索和Split Layouts。
我最喜欢的一个Emacs基础功能,就是可以进行快速的递归文本检索(recursive grep search)—— M-x rgrep 。举个例子,假如你想在某个文件夹下以 .md 为扩展名的文件中,查找所有出现过 python 一词的段落:
完成基础配置之后,我们可以开始将Emacs配置为Python开发环境啦!
要想安装并启用 elpy 插件,我们需要进行一些配置,并使用你自己喜欢的方式(例如, pip 或 conda )安装 flake8 和 jedi 这两个Python工具包。
下面的配置可以安装 elpy 插件包:
现在我们这样启用这个插件:
完成上面的配置之后,我们可以重启Emacs,并打开一个Python文件,就可以查看新的配置是否生效。
上面这幅图中显示了以下几种功能:
另外,假设我们想要运行这个脚本。在Python自带的IDLE或Sublime Text中,你可以点击一个运行当前脚本的按钮。Emacs编辑器也是一样,不过我们只需要Python缓冲区按下 C-c C-c 即可。
通常,我们会希望运行一个虚拟环境,然后再使用虚拟环境中安装的工具包来执行代码。要想在Emacs中使用虚拟环境,我们需要输入 M-x pyvenv-activate ,然后根据提示操作。输入 M-x pyvenv-deactivate 就可以关闭虚拟环境。Elpy插件还提供了调试虚拟环境、处理elpy插件可能出现的问题的接口。输入 M-x elpy-config ,就会出现下面的信息,其中包含了有价值的调试信息。
到这里,我们已经介绍完在Emacs中实现Python IDE基础功能的方法。接下来,我们来进一步完善Emacs的配置。
除了上面介绍的基本IDE功能之外,Emacs还针对Python语言提供了一些额外的功能。在这一部分,我们无法介绍全部的额外功能,但是肯定会涉及PEP8、IPython/Jupyter集成。不过在此之前,我们要快速梳理一下语法检查配置。
默认情况下,安装了Elpy插件的Emacs提供一个名叫 Flymake 的语法检查插件。但是,我们还可以选择另外一个名叫 Flycheck 的插件,后者支持实时语法检查。幸运地是,从 Flymake 切换至 Flycheck 非常简单:
以及
现在,我们就可以在编辑Python代码的同时,获得实时代码检查反馈了:
不管你喜不喜欢,PEP8都不会消失。如果你想遵循PEP8标准的全部或部分规范,你大概希望能够实现自动化合规。 autopep8 插件就是解决之道。这个插件与Emacs无缝集成,因此当你保存文件时—— C-x C-s ——autopep8插件就会自动格式化代码,并纠正所有不符合PEP8标准的错误(排除你不希望检查的错误)。
首先,你需要通过你喜欢的方式安装 autopep8 这个Python工具包,然后添加下面的Emacs配置代码:
以及
现在我们保存Python示例文件,Autopep8插件就会自动纠正出现的错误:
接下来这个功能尤其强大:将Emacs与IPython REPL和Jupyter Notebooks集成。首先,我们将Emacs中标准的Python REPL集成替换为IPython版本:
现在如果我们按下 C-c C-c 再次运行Python代码,我们使用的将是IPython REPL:
尽管做到目前这样已经非常有用了,但是真正的神奇之处还在Emacs与Jupyter notebook之间的集成。这里,我们假设你已经知道如何启动Jupyter Notebook服务器。要实现前面提到的集成,我们只需要再添加一些配置即可:
Jupyter提供的notebook网络接口很好,但是要求我们离开Emacs编辑器才能使用:
不过,我们可以通过在Emacs中直接连接notebook服务器,并与服务器进行直接交互的方式,就可以完成网络接口所提供的功能。
前面我们已经介绍了所有Python IDE应具备的基础功能(以及一些非常棒的额外功能),但是还有一些功能也是IDE需要支持的。首先就是git集成。
与使用只针对Python的IDE相比,使用Emacs的一大好处就是它还能够支持除Python外的其他语言。工作的时候,我通常要使用Python、Golang、JavaScript、Markdown、JSON以及其他语言。因此,只使用Emacs编辑器并且完美支持所有这些语言将会大大提高工作效率。Emacs编辑器支持以下语言:
学会使用Emacs之后,你会希望在其他地方也能够使用Emacs按键组合。只需要在bash提示符之后输入 set -o emacs 即可实现。但是,Emacs的一个强大之处就是你可以在终端下以headless模式运行Emacs编辑器。这也是我本人的默认终端环境。要开启headless模式,只需要输入 emacs -nw 即可。
正如你所见,Emacs明显是最好的编辑器。老实说,市面上还有其他很好的Python IDE可供选择,但是我会毫不犹豫地推荐你学习Vim或Emacs,因为基于这两个编辑器配置的开发环境无疑是功能最为多样化的。最后,为大家提供本文中完整的Emacs配置: