Emacs Python自动完成
我刚刚意识到我使用auto-complete.el的0.2版本。我想我需要使用auto-complete.el版本0.1。我可以从哪里下载?我只能在Google上找到更新的版本。
我想在Emacs中为Python设置自动完成。
我使用Ubuntu LTS版本,我安装了Python和Emacs。
这是我的.emacs文件:
(setq-default indent-tabs-mode nil) ; always replace tabs with spaces
(setq-default tab-width 4) ; set tab width to 4 for all buffers
(add-to-list 'load-path "~/.emacs.d/vendor")
(progn (cd "~/.emacs.d/vendor")
(normal-top-level-add-subdirs-to-load-path))
(require 'python)
(require 'auto-complete)
(require 'yasnippet)
(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))
;; Initialize 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)
;; Initialize Rope
(pymacs-load "ropemacs" "rope-")
(setq ropemacs-enable-autoimport t)
;; Initialize Yasnippet
;Don't map TAB to yasnippet
;In fact, set it to something we'll never use because
;we'll only ever trigger it indirectly.
(setq yas/trigger-key (kbd "C-c <kp-multiply>"))
(yas/initialize)
(yas/load-directory "~/.emacs.d/snippets")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 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 python-mode-map "\t" 'ryan-python-tab)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; End Auto Completion
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
里面的.emacs.d目录我:
pymacs.el
init_python.el
vendor/
snippets/
的.emacs.d /供应商我已经安装了内部pymacs,yasnippet和自动完成,所以它看起来是这样的:
auto-complete.el
pinard-Pymacs-4be2c15/
yasnippet-0.5.9/
当我启动Emacs这样的:
emacs -nw manage.py
我收到此错误信息:
![enter image description here][1]
任何想法如何得到它的工作?
我一直在Google上搜索很长时间,但我找不到任何明确的说明如何让它们一起工作。
据我所知,Python模式附带Emacs,所以你甚至不需要做任何事情来激活它。我在Python中一起使用autocomplete
和yasnippet
,它似乎对我很好。下面是我的.emacs
(add-to-list 'load-path
"~/.emacs.d/plugins/yasnippet")
...
(require 'yasnippet)
(yas/global-mode 1)
...
(require 'auto-complete-config)
...
(add-hook 'python-mode-hook 'auto-complete-mode)
我得到了我从this github repo yasnippet的版本,我从developers' site自动完成的版本(与来自EmacsWiki)中的相关位。
不要使用rope/pymacs for python完成Emacs,我建议使用https://github.com/tkf/emacs-jedi,这真的很棒。
您可以使用el-get(https://github.com/dimitri/el-get)安装jedi
,它会为您安装必要的依赖关系。
我的.emacs绝地配置:
;;; jedi completion
;;; see https://github.com/tkf/emacs-jedi
;; jedi dependency: deferred
(add-to-list 'load-path (expand-file-name
"~/.emacs.d/el-get/deferred"))
;; jedi dependency: deferred
(add-to-list 'load-path (expand-file-name
"~/.emacs.d/el-get/ctable"))
;; jedi dependency: epc
(add-to-list 'load-path (expand-file-name
"~/.emacs.d/el-get/epc"))
(add-to-list 'load-path (expand-file-name
"~/.emacs.d/el-get/jedi"))
(require 'jedi)
(setq jedi:server-args
'("--sys-path" "/usr/lib/python2.7/"
"--sys-path" "/usr/lib/python2.7/site-packages"))
(setq jedi:setup-keys t)
不要以为报的错误与蟒蛇模式什么的。 也许做一个grep,搜索发生错误的程序。 对选项“-nw”的WRT,图形,成像支持可能被错过或损坏。