高效的動態語言開發環境(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