高效的动态语言开发环境(python: linux + emacs + evil + *.el)
高效的动态语言开发环境(python: linux + emacs + evil + *.el)
Table of Contents
1 前言
1.1 动态语言
- 这里专指动态语言。像某位达人说的,如果你用java,最好的选择是eclipse或者Intellij, 如果你用net,最好的选择就是visual studio。动态语言的一个明显的开发优势就是解析运行。你可以在开发 过程中不断往运行环境中添加类或函数。也可以在不同的地方分享同一个运行环境(本文以python作为例子)。
1.2 高效
- 这里指高效编辑,快速测试。
1.3 linux
- shell,任何时候,当你厌倦重复的输入指令(尤其是在一个项目里面),就地写一个脚本,然后 就实现了自动化。
- 进程间合作。这个“Unix编程艺术”中经常提到的,这里强调后端服务器与前端合作在开发中的好处 (可以看下面例子)。
1.4 emacs+evil
- evil是啥?它是emacs上的vim模拟器,安装上这个插件,你就可以在emacs上用上vim的所有快捷键从而达到 相当高效的编辑,具体可以看看这个:高效文本编辑的7个习惯。至于vim的概念和操作,光是一本中文手册 就有2000多页,可见其功能有多强大!
- 为什么是emacs?强大,丰富的插件,完全的可定制,牛人都喜欢用它!记得有达人说过,你用emacs,就像 在调教自己的小孩(好像是这样说的)。
- emacs的server+client:通过client连接到server,任何时候都可以拥有server已经搭建的开发环境,这对 快速测试开发是相当方便的。
2 搭建环境
详细的配置可以参考我的另一篇博客`我的linux探索之路 中关于python的配置。
2.1 python-mode
- 这个是emacs自带的python开发模式。有两个相当方便的命令:'eval buffer, 'eval region。 运行M-x run-python后,基本上你就不需要离开当前的编辑buffer了,所有的语句,都可以直接send到 后台运行的python解析器中去(后端与前端合作的一个完美的例子)。 如果你打开两个窗口,就可以一边编辑,一边看到结果。当然,有这两个指令还是有些不足, 我更多的时候是写完一个语句,然后想马上知道结果是啥,所以,我在init-python-mode.el 中添加下面的代码(ok,现在只需按下“\C-c \C-l”,光标下的语句就自己send到python运行环境中, 结果也可以马上看到了,在这之前,我必须把这个语句先选上,然后再eval region,然后再取消选择。 emacs的可定制由此可见)
(eval-after-load 'python `(progn (defun python-shell-eval-current-line () "Eval current line." (interactive) (python-shell-send-region (line-beginning-position) (line-end-position))) (define-key python-mode-map (kbd "C-c C-l") nil) (define-key python-mode-map (kbd "C-c C-l") 'python-shell-eval-current-line)))
如果你再配合上vim的快捷的文本操作,你就会发现,这编辑代码的过程是多么的流畅自如。
2.2 jedi
- 这个是python的后端补全工具包,这个是文档中的原话:
Jedi.el is a Python auto-completion package for Emacs. It aims at helping your Python coding in a non-destructive way. It also helps you to find information about Python objects, such as docstring, function arguments and code location.
有了这个强大的后端(另一个完美的前后端的例子),你就有了自动补全,查看参数,跳到变量定义的地方, 能够自由地在python的编程环境中遨游。比如说我最近在使用scrapy,当我不知道某个函数的用法时, 按下“\S-c .”,我就可以轻松去到scrapy的源代码,直接阅读源代码中的具体实现 (如果你再配合上emacs上的文件浏览的插件,你想去哪,就能去哪)。
2.3 pep8,pylint,flycheck
- 这几个插件联合起来,基本就可以完美的搞掂python代码中的语法错误和格式规范化。一旦代码中有错误, 就能够立刻在mini buffer中看到哪里出错。
2.4 pylookup
- 这个插件用于查询python官方手册,对于内建的类库或函数,执行命令'pylookup-lookup, 就可以在浏览器中查看对应的模块的说明了。
2.5 ein
- emacs作为ipython notebook的一个前端,可以直接到ipython notebook的服务器上,然后就可以 实现通话了。而且拥有了ipython的全套指令(又是一个后端前端合作的例子)。
3 调试
- 可以在emacs中直接运行pdb进行调试。
4 图示
- 图示的是emacs + pymongo(mongodb的python驱动程序)的开发环境。编辑.py的文件,通过run python打开一个 python 运行环境,通过eval current buffer 连接到mongodb,通过emacsclient(需启动emacs server) 打开另一个.py文件,通过eval current line 直接进入到server的python运行环境中。
5 后记
- 还是喜欢《unix编程艺术》中的那句话:
有严格的工具套装,彼此合作,组合起来成为强大的系统
- 通过上面的配置,就可以搭建一个相当高效方便的python开发环境,而且,还可以在不断的使用过程中 优化你的开发环境和习惯,因为,一切,都是可配置的。
(谢谢阅读,欢迎指正,欢迎交流)