Windows上配置Emacs来开发Python及用Python扩展Emacs


Posted in Python onNovember 20, 2015

Windows下配置Emacs来开发Python
去年在网上偶然的一个机会知道了Emacs的存在,在周围前辈们都在夸赞Sublime好用的时候,喜欢跟大众唱反调的我,突然觉得如果能用Emacs来编代码,也许是个很牛的技能。
但是在看了一次Tutorial后,就因为复杂的快捷键和不同于一般编辑器的操作方式放弃了这个想法。
今年开始工作以后,公司还没有给我发配项目,让我有时间学了些Python入门。在寻找合适的编辑器的时候,搁置脑后许久的Emacs突然被揪了出来。
重新开始打开教程,耐着性子看完,并稍微记住了几个快捷键,总算能够磕磕绊绊的使用了。
然后在开始寻找Emacs上使用Python的方法的时候,才发现原来Emacs的插件配置对于新手这么棘手。中文的资料本来就少,而且大多数还是在Linux/Mac系统上的。向我们这样在Windows上使用Emacs的“少数人口”似乎很难入门。

今天在公司,花了一下午时间,各种搜索,各种尝试,各种折腾,总算是让Emacs用上了Python-mode插件。虽然似乎用的最多的和功能更全的是iPython插件,不过今天为止还没有弄明白。以后有机会再更新后续内容吧。今天就把再Window环境下Emacs配置Python-mode插件的方法记录下来。

Emacs的下载安装
下载
Emacs官方地址
http://www.gnu.org/software/emacs/

下载地址:(windows 版本)
http://ftp.gnu.org/gnu/emacs/windows/
下载最新版本的zip包就可以

安装
下载解压后,进入根目录下的bin文件夹,运行addpm.exe安装,安装后在开始菜单中会加入GNU Emacs项。
当然你也可以选择不安装,直接调用emacs.exe 或 runemacs.exe打开Emacs。

入门
运行Emacs后,点击Help菜单下的“Emacs Tutorial”进入Emacs自带的教程文档。(教程文档很高质量,向文档创建\译制者们致敬)还可以点击“Emacs Tutorial(choose language)”来选择不同的语言。
读完教程能帮助初学者快速入门和对Emacs最基本的概念进行理解,并能简单的进行Emacs的日常使用。
Emacs的功能十分强大,更多的应用还需要使用者日后不断地学习。

Python的安装
Python的安装请参考其他资料,为了编辑速度,这里先集中说明Emacs的配置。

Emacs配置使用Python-mode
Emacs配置
在很多有关Emacs配置的资料里,都会提到说“~/.emacs.d/”路径和“~/.emacs”文件,我折腾了很久没找到。后来才发现,“~”所指的HOME路径在window系统里是C:\Users\(username)\AppData\Roaming :

按Windows7系统本身的HOME目录配置的话,C:\Users\(username)\AppData\Roaming 这个HOME目录太深了,而且默认状态下AppData目录是隐藏的,最最关键的是:如果系统盘一旦出问题,之前的.emacs配置文件和.el的扩展都得重新配置和下载。接下来很多资料上会教你怎样更改HOME目录以更方便的使用它。但事实上,初次使用Emacs的用户如果没有经常要更改配置文件的需要的话,使用原本的目录就足够了,如果你的电脑已经设置显示隐藏文件的话,这个目录也不是特别难找。

~/.emacs 文件并不是一开始就存在的。在Emacs的Options菜单里随便设置一项,比如点选 Highlight Matching Parenthesis 然后选择 Save Options, mini缓冲区里就会显示 “Wrote c:/Users/(username)/AppData/Roaming/.emacs”这时进入HOME目录就能看到.emacs文件和.emacs.d目录了。

python-mode
python-mode下载:
https://launchpad.net/python-mode
下载解压,进入Python shell 运行

>python setup.py install
安装。Python shell的进入方式在安装python的资料里都会有,大家自行参考。
然后将解压后的 python-mode.el 文件复制到HOME目录.emacs.d文件夹下。
打开.emacs文件, 添加如下内容:
(require 'python-mode)
(add-to-list 'auto-mode-alist '("\\.py'" . python-mode))

运行Emacs,便会自行配置好python-mode了。

运行
配置好python-mode后,用emacs打开任何.py文件,输入 M-x py-execute-buffer 来运行python代码。
使用快捷键 C-c C-c 也是一样的效果。

使用 python 扩展 emacs
Pymacs 可以使得emacs能和python程序进行交互,可以让emacs插件开发者尽量使用python进行开发。这里提供一个例子,在lisp中调用python的函数并将当前buffer的文件名传递给python,在emacs中输出python函数的返回值

安装
首先安装 python 包 Pymacs. 在 ubuntu 里面安装 pymacs 即可。

然后安装emacs插件pymacs, el-get-install 或者 package-install 都可以

写一个 python 模块
目录结构如下:

├── sample

│  └── __init__.py

└── setup.py

__init__.py 的内容:

from Pymacs import lisp
 
interactions = {}
 
def hello_word(filename):
  return 'Hello from python, file name is %s' % filename
 
 
interactions[hello_word] = ''

setup.py 的内容:

from setuptools import setup, find_packages
 
setup(
  name = "sample-pymacs",
  version = "0.1",
  packages = find_packages()
)

安装这个模块

python setup.py install

如果一切正常, 在 python 中可以 import sample

在lisp中调用python 模块
创建一个lisp文件:

(pymacs-load "sample")
(message (sample-hello-word buffer-file-name))

将光标移动到每一行上并使用 C-M-x 来执行该行 lisp 代码, 执行后会在emacs上看到输出。

Python 相关文章推荐
python 生成器生成杨辉三角的方法(必看)
Apr 10 Python
Python实现的排列组合计算操作示例
Oct 13 Python
python 用正则表达式筛选文本信息的实例
Jun 05 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 Python
Python Django实现layui风格+django分页功能的例子
Aug 29 Python
python3实现高效的端口扫描
Aug 31 Python
Python turtle画图库&&画姓名实例
Jan 19 Python
python 双循环遍历list 变量判断代码
May 04 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
python爬虫请求头的使用
Dec 01 Python
如何理解python接口自动化之logging日志模块
Jun 15 Python
将Emacs打造成强大的Python代码编辑工具
Nov 20 #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
You might like
php学习笔记 类的声明与对象实例化
2011/06/13 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
destoon二次开发常用数据库操作
2014/06/21 PHP
php使用正则表达式获取图片url的方法
2015/01/16 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
jQuery新窗口打开外链接
2016/07/21 Javascript
Mvc提交表单的四种方法全程详解
2016/08/10 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
python文件和目录操作方法大全(含实例)
2014/03/12 Python
浅谈对yield的初步理解
2017/05/29 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
python中map()函数的使用方法示例
2017/09/29 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
Python实现的栈(Stack)
2018/01/26 Python
简单分析python的类变量、实例变量
2019/08/23 Python
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
买房协议书
2014/04/11 职场文书
五水共治捐款倡议书
2014/05/14 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书
「地球外少年少女」BD发售宣传CM公开
2022/03/21 日漫