高效的动态语言开发环境(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的快捷的文本操做,你就会发现,这编辑代码的过程是多么的流畅自如。java
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上的文件浏览的插件,你想去哪,就能去哪)。python
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开发环境,并且,还能够在不断的使用过程当中 优化你的开发环境和习惯,由于,一切,都是可配置的。
(谢谢阅读,欢迎指正,欢迎交流)linux