Emacs中打造強大的Python IDE

來源:互聯網
上載者:User

本文將介紹,在Emacs中,通過各種擴充,打造強大的Python IDE環境,包括Snippet工具,智能提示,自動補全,重構工具,調試以及GAE的調試,等等。以下各工具的安裝前提是你對Emacs的設定檔有一定的瞭解,所有相關的el檔案都必須放在load_path能夠載入的地方。

1. YASnippet

snippet工具,可自訂一些模板,必不可少的好東西!看了下面這個很酷的示範動畫就明白了:

http://yasnippet.googlecode.com/files/yasnippet.avi

安裝方法:

(require 'yasnippet)
(yas/initialize)
(yas/load-directory "~/.emacs.d/plugins/yasnippet-0.6.1c/snippets")
2. AutoComplete

自動完成工具,會像VS裡一樣,彈出一個列表框讓你去選擇。

'

安裝方法:

(require 'auto-complete)
(require 'auto-complete-config)
(global-auto-complete-mode t)
(setq-default ac-sources '(ac-source-words-in-same-mode-buffers))
(add-hook 'emacs-lisp-mode-hook (lambda () (add-to-list 'ac-sources 'ac-source-symbols)))
(add-hook 'auto-complete-mode-hook (lambda () (add-to-list 'ac-sources 'ac-source-filename)))
(set-face-background 'ac-candidate-face "lightgray")
(set-face-underline 'ac-candidate-face "darkgray")
(set-face-background 'ac-selection-face "steelblue") ;;; 設定比上面中更好看的背景顏色
(define-key ac-completing-map "\M-n" 'ac-next)  ;;; 列表中通過按M-n來向下移動
(define-key ac-completing-map "\M-p" 'ac-previous)
(setq ac-auto-start 2)
(setq ac-dwim t)
(define-key ac-mode-map (kbd "M-TAB") 'auto-complete)
3. Rope and Ropemacs

非常棒的重構工具,比如rename,move,extract method等等。還有非常好用的goto difinition(跳到定義),show documents(顯示文檔)等等。安裝Ropemacs前,必須先安裝rope和pymacs 。

rope的安裝方法:

python setup.py install

pymacs的安裝方法:

python setup.py install

.emacs中:

(autoload 'pymacs-apply "pymacs")
(autoload 'pymacs-call "pymacs")
(autoload 'pymacs-eval "pymacs" nil t)
(autoload 'pymacs-exec "pymacs" nil t)
(autoload 'pymacs-load "pymacs" nil t)

Ropmacs的安裝方法:

python setup.py install

.emacs中:

(pymacs-load "ropemacs" "rope-")
(setq ropemacs-enable-autoimport t)
4. pycomplete

一個更加強大的智能提示工具,比如,輸入time.cl 然後按TAB鍵,會列出time模組所有cl開頭的函數名。在調用函數時,還會在mini buffer中提示函數的參數類型。這個東西需要先安裝pymacs。

安裝方法:

1. 拷貝 python-mode.el and pycomplete.el 到Emacs的load_path中。

2. 拷貝 pycomplete.py 到PYTHONPATH (比如: c:/python25/Lib/site-packages)

3. .emacs中添加:

(require 'pycomplete)
(setq auto-mode-alist (cons '("\\.py$" . python-mode) auto-mode-alist))
(autoload 'python-mode "python-mode" "Python editing mode." t)
(setq interpreter-mode-alist(cons '("python" . python-mode)
                           interpreter-mode-alist))

5. pdb調試

在Emacs中,通過M-x pdb可調出pdb對python代碼進行調試。但是發現在Windows系統中,總進入不了偵錯模式。主要原因有:

1. windows中,找不到pdb.py位置。需自己制定pdb的路徑。可以通過下面的方法設定pdb的路徑:

;; pdb setup, note the python version
(setq pdb-path 'c:/python25/Lib/pdb.py
       gud-pdb-command-name (symbol-name pdb-path))
 (defadvice pdb (before gud-query-cmdline activate)
   "Provide a better default command line when called interactively."
   (interactive
    (list (gud-query-cmdline pdb-path
                 (file-name-nondirectory buffer-file-name)))))

2. windows中,調用pdb時,未使用python -i 參數。

針對上面兩個問題,我的解決辦法是,不設定pdb具體路徑,M-x pdb 斷行符號後,出現下面命令:

Run pdb (like this): pdb 

然後手動修改一下:

Run pdb (like this): python -i -m pdb test.py

這樣就搞定了。

6. 如何調試GAE程式

GAE是一個Web應用,需要跨線程進行調試,而pdb本身對線程調試支援不好。使用pdb進行線程調試時,只有在需要調試的地方插入下面代碼:

import pdb
pdb.set_trace()

然後直接運行被調試代碼,而不是通過python pdb來執行,就可以多線程代碼進行調試了。

但是Google App Engine這樣的Web應用,使用這個方法還是不能調試,和stdin和stdout有關,最後找到一個很好的解決方案:

def set_trace():
    import pdb, sys
    debugger = pdb.Pdb(stdin=sys.__stdin__,
        stdout=sys.__stdout__)
    debugger.set_trace(sys._getframe().f_back)

在任何需要調試的地方,調用上面的set_trace()函數。

如果你還有更好玩的東西,一定要告訴我!

參考文檔:

http://www.emacswiki.org/emacs/PythonMode

http://www.enigmacurry.com/2008/05/09/emacs-as-a-powerful-python-ide/ 

http://jjinux.blogspot.com/2008/05/python-debugging-google-app-engine-apps.html 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.