将Emacs打造成强大的Python代码编辑工具


Posted in Python onNovember 20, 2015

基本配置

Emacs本身提供了python-mode,输入M-x python-mode,就可以进入python模式。相应地,会在菜单栏出现Python菜单。当然,一般来讲,如果是.py文件打开的话,也会自动进入该模式。
        不过,默认的python模式功能上面用起来还是有点弱,而且许多地方做的并不好,最好下载第三方的python模式。python-mode是一个开源项目,可以在https://launchpad.net/python-mode进行下载。
1.安装
        1).安装prog-modes: 

aptitude install prolog-el

        2).下载python-mode.el文件在项目主页上面。
        3).编译:

C-x C-f /path/to/python-mode.el RET
        M-x byte-compile-file RET

        4).在.emacs中加入python-mode.el路径:

(setq load-path (cons "/dir/of/python-mode/" load-path))

        检测扩展是否加载路径,测试方法:M-x locate-library RET python-mode RET
2.配置.emacs文件

(setq auto-mode-alist

 (cons '("//.py$" . python-mode) auto-mode-alist))

(setq interpreter-mode-alist

 (cons '("python" . python-mode)

 interpreter-mode-alist))

(autoload 'python-mode "python-mode" "Python editing mode." t)

;;; add these lines if you like color-based syntax highlighting

(global-font-lock-mode t)

(setq font-lock-maximum-decoration t)

(set-language-environment 'Chinese-GB)

(set-keyboard-coding-system 'euc-cn)

(set-clipboard-coding-system 'euc-cn)

(set-terminal-coding-system 'euc-cn)

(set-buffer-file-coding-system 'euc-cn)

(set-selection-coding-system 'euc-cn)

(modify-coding-system-alist 'process "*" 'euc-cn)

(setq default-process-coding-system 

 '(euc-cn . euc-cn))

(setq-default pathname-coding-system 'euc-cn)

3.操作
      1).执行:C-c C-c,这样会在新的窗口及缓冲区执行脚本;
      2).C-j:以相同的缩进插入新的一行;
      3).C-M-a:跳至函数或类首;
      4).C-M-e:跳至函数或类尾;
      5).C-c C-w:运行PyChecker进行代码检测;
大体的使用方式就是这样的了,另外,还有许多类或函数的模板可以通过快捷键进行,在今后常用的时候会加强了解的。感谢你能看到这里!

安装扩展
在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里一样,弹出一个列表框让你去选择。

将Emacs打造成强大的Python代码编辑工具

安装方法:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->(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的路径:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->;; 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()函数。

Python 相关文章推荐
Python写的服务监控程序实例
Jan 31 Python
python通过socket查询whois的方法
Jul 18 Python
使用Python神器对付12306变态验证码
Jan 05 Python
利用matplotlib+numpy绘制多种绘图的方法实例
May 03 Python
numpy.random.seed()的使用实例解析
Feb 03 Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 Python
Python不同目录间进行模块调用的实现方法
Jan 29 Python
Python读取指定日期邮件的实例
Feb 01 Python
对python 自定义协议的方法详解
Feb 13 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
Apr 11 Python
Python聚类算法之DBSACN实例分析
Nov 20 #Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 #Python
Python聚类算法之基本K均值实例详解
Nov 20 #Python
Python实现将xml导入至excel
Nov 20 #Python
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 #Python
详解在Python程序中解析并修改XML内容的方法
Nov 16 #Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 #Python
You might like
PHP向socket服务器收发数据的方法
2015/01/24 PHP
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
js切换光标示例代码
2013/10/10 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
从Python程序中访问Java类的简单示例
2015/04/20 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
对Python之gzip文件读写的方法详解
2019/02/08 Python
python增加图像对比度的方法
2019/07/12 Python
python使用openpyxl操作excel的方法步骤
2020/05/28 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
个人找工作的自我评价
2013/10/17 职场文书
公司前台接待岗位职责
2013/12/03 职场文书
法务专员岗位职责
2014/01/02 职场文书
学校对教师的评语
2014/04/28 职场文书
读书之星事迹材料
2014/05/12 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
土地转让协议书
2014/09/27 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
吃通javascript正则表达式
2021/04/21 Javascript