Emacser  - 讨论区

标题:如何配置emacs python 开发环境?

2010年05月28日 星期五 20:27

如题,我来给大家讲下如何配置!

我只是介绍工具,不会深入到代码如何实现,因为,我只是利用它而已,况且想要讲代码,那是不可能的......因为,很多人可能没学过LISP等语言..........

 

开始吧,

   下载pymacs,解压到任意一个目录中,如:我的是[B.Qnyd@localhost 下载]$ ls -l

将会看见pymacs  的python代码源包,解压就行了....

进入其中  执行 python setup.py install 可以先执行python setup build 然后安装rope ropemacs来很好的配合python让他具有IDE的项目管理功能,首先执行下面的命令下载源代码下来

 
  $
  
   hg clone http:/
  
 
 
  
   /
  
  
   bitbucket
  
  
   .
  
  
   org
  
  
   /
  
  
   agr
  
  
   /
  
  
   rope
  
  
   /
  
 
 
  
$ hg clone http
: //bitbucket.org/agr/ropemacs/
$ hg clone http
: //bitbucket.org/agr/ropemode/

然后分别进入rope ropemacs 里面执行
python setup.py install

把三个文件分别移动到你的path下面如: mv rope* /home/B.Qnyd/lisp/
如果你还想要它检查你的语法是否正确,你就需要安装pyflakes
我的是fedora 直接安装 yum install pyflakes
其他系统可以用sudo apt-get install 等系统默认的在线安装包...
( 注意这个python-setuptools东西必不可少,一样执行 yum install python-setuptools)
然后.
新建一个pymacs-settings.el 把以下代码加入进去:

(setq pymacs-load-path '("~/lisp/rope"
"~/lisp/ropemacs"))
(autoload 'python-mode "python-mode" "Python Mode." t)
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))
(require 'python-mode)
(add-hook 'python-mode-hook
(lambda ()
(set-variable 'py-indent-offset 4)
;(set-variable 'py-smart-indentation nil)
(set-variable 'indent-tabs-mode nil)
(define-key py-mode-map (kbd "RET") 'newline-and-indent)
;(define-key py-mode-map [tab] 'yas/expand)
;(setq yas/after-exit-snippet-hook 'indent-according-to-mode)

))
;; pymacs
(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)
;;(eval-after-load "pymacs"
;; '(add-to-list 'pymacs-load-path YOUR-PYMACS-DIRECTORY"))
(pymacs-load "ropemacs" "rope-")
(setq ropemacs-enable-autoimport t)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Auto-completion
;;; Integrates:
;;; 1) Rope
;;; 2) Yasnippet
;;; all with AutoComplete.el
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun prefix-list-elements (list prefix)
(let (value)
(nreverse
(dolist (element list value)
(setq value (cons (format "%s%s" prefix element) value))))))
(defvar ac-source-rope
'((candidates
. (lambda ()
(prefix-list-elements (rope-completions) ac-target))))
"Source for Rope")
(defun ac-python-find ()
"Python `ac-find-function'."
(require 'thingatpt)
(let ((symbol (car-safe (bounds-of-thing-at-point 'symbol))))
(if (null symbol)
(if (string= "." (buffer-substring (- (point) 1) (point)))
(point)
nil)
symbol)))
(defun ac-python-candidate ()
"Python `ac-candidates-function'"
(let (candidates)
(dolist (source ac-sources)
(if (symbolp source)
(setq source (symbol-value source)))
(let* ((ac-limit (or (cdr-safe (assq 'limit source)) ac-limit))
(requires (cdr-safe (assq 'requires source)))
cand)
(if (or (null requires)
(>= (length ac-target) requires))
(setq cand
(delq nil
(mapcar (lambda (candidate)
(propertize candidate 'source source))
(funcall (cdr (assq 'candidates source)))))))
(if (and (> ac-limit 1)
(> (length cand) ac-limit))
(setcdr (nthcdr (1- ac-limit) cand) nil))
(setq candidates (append candidates cand))))
(delete-dups candidates)))
(add-hook 'python-mode-hook
(lambda ()
(auto-complete-mode 1)
(set (make-local-variable 'ac-sources)
(append ac-sources '(ac-source-rope) '(ac-source-yasnippet)))
(set (make-local-variable 'ac-find-function) 'ac-python-find)
(set (make-local-variable 'ac-candidate-function) 'ac-python-candidate)
(set (make-local-variable 'ac-auto-start) nil)))
;;Ryan's python specific tab completion
(defun ryan-python-tab ()
; Try the following:
; 1) Do a yasnippet expansion
; 2) Do a Rope code completion
; 3) Do an indent
(interactive)
(if (eql (ac-start) 0)
(indent-for-tab-command)))
(defadvice ac-start (before advice-turn-on-auto-start activate)
(set (make-local-variable 'ac-auto-start) t))
(defadvice ac-cleanup (after advice-turn-off-auto-start activate)
(set (make-local-variable 'ac-auto-start) nil))
(define-key py-mode-map "\t" 'ryan-python-tab)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; End Auto Completion
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Auto Syntax Error Hightlight
(when (load "flymake" t)
(defun flymake-pyflakes-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "pyflakes" (list local-file))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.py\\'" flymake-pyflakes-init)))
(add-hook 'find-file-hook 'flymake-find-file-hook)
(provide 'pymacs-settings)



然后在你的.emacs 里面加入 (load "pymacs-settings")这样你就给你的emacs扩展了自动补全,
建立工程了.不比任何IDE差...... 不过首先你得配置好,不然你就会觉得它很差劲....

2010年05月28日 星期五 20:45

这样的原创帖子好,顶小包。

2010年05月28日 星期五 20:49

谢谢!.....等我的有空给大家大概讲下 elisp在emacs中的配置...

2010年05月28日 星期五 20:53

非常期待!

2010年05月28日 星期五 22:58

请教下,根据上述教程弄好后,按TAB时,出现这个:

ac-sources-init: Symbol's value as variable is void: ac-source-yasnippet

我的EMACS版本还是23.1.  Ubuntu10.0.4  yasnippet,ropemacs,pyflakes等等用apt-get install都安装好了

谢谢!

2010年05月29日 星期六 09:09

囧!

(add-to-list 'load-path
            "~/.emacs.d/plugins/")
(require 'yasnippet-bundle)

这个你加载没,

yasnippet 这个东西 不需要apt-get install 吧  直接把文件放在你的path下面 在.emacs加上以上代码 就OK啦~~

2010年05月29日 星期六 12:26

下载了yasnippet

两行命令也加进了,还是不行,我把我的配置发给你了,还请包大侠看一下!

 

2010年05月29日 星期六 12:39

你下的版本有问题。。  你下载 yasnippet-bundle-0.6.1c.el.tgz 版本的。。。  你下那个版本 我没测试过, 你按照作者视频教的那样做啊。。

2010年05月29日 星期六 12:42

如果那些东西没有的话 找不到版本  可以参考 我的。emacs.d里面的文件, 一般只有  其他软件才会安装 本身就是.el的文件无需,直接加载进去 就能用。。。   需要直接安装的 如我配置里面的星际译王字符版这些才需要!

2010年06月28日 星期一 16:42

经包大侠指点,终于成功了!

补充一点是,在完成上述教程后,需要安装auto-complete的mode,因为默认不自带。

顺便问一下

1 第一次启动后emacs会自动提问要新建的一个rope的文件夹是做什么用的?

2 auto-complete后面的d和a 代表什么意思 ?

2010年06月28日 星期一 16:58

9.8.7. symbol

 

Specify a symbol of candidate meaning in one character string. The symbol will be any character, but you should follow the rule:

 

SymbolMeaning
s Symbol
f Function, Method
v Variable
c Constant
a Abbreviation
d Dictionary

 

  http://cx4a.org/software/auto-complete/manual.html 详细可以看下这个 

 

rope  是项目创建一些脚本,比如C  建立一个文件的时候提示你需要建立一个MAKEFILE

2010年11月30日 星期二 20:44

请问小包:

我用了这个配置文件但是auto-complete 似乎还是不能生效,按TAB检没有什么反应,我还用了共享里面的init-auto-complete-init.el来初始化auto-complete

 

2010年11月30日 星期二 20:46

@11楼,这个插件配置  有视频的 你看作者怎么配置的吧

2010年11月30日 星期二 21:12

好像还是不行,我看作者的视频里面就改了auto-complete.el这个文件的头上加了几行
(defun ac-complete-by-space()
(interactive)
(insert " "))
还是不太明白

2010年11月30日 星期二 21:18

这个是定义一个ac-complete-by-space 函数。。。

你看他如何安装的 直接操作就是了。。

 

或者你去下我的配置文件找到这个相关的文件copy出来放在你的路径下,  然后C-s 查找auto-complete 复制放到你的.emacs 下。。

 

 

2010年11月30日 星期二 21:30

哪里有下阿 我第一次来 不清楚呢

找到了 研究一下先

2010年11月30日 星期二 21:41

     共享有 老版本 比较小的  你下那个吧 找起来方便 最新的 太大了我传不上文件。没法share~

cc

cc

2011年02月10日 星期四 10:36

不错,试一下.

2011年07月26日 星期二 10:41

视频在哪?

2011年09月30日 星期五 11:29

我终于搞定了,emacswiki的autocomplete是很老的版本,用作者最新的版本试一下,安装很简单。

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2021

    京ICP备05028076号