我按照此链接here尝试在Windows上为python dev设置emacs。虽然一切看起来都很好,但是pyflakes正在创建问题并且没有给我语法检查。每次打开'.py'文件时,都会收到错误消息 “无法使用args'foo.py'启动语法检查过程'pyflakes':搜索程序:没有这样的文件或目录pyflakes”
有人可以帮我解决这个问题吗?
更新:
这是我的.emacs
;; Abhi's c:\.emacs file
(add-to-list 'load-path "C:/emacs/colors/")
(require 'color-theme)
(eval-after-load "color-theme"
'(progn
(color-theme-initialize)
(color-theme-charcoal-black)))
(set-default-font "-outline-Monaco-normal-r-normal-normal-13-97-96-96-c-*-iso8859-1")
;Mappings to zoom in and out
(defun sacha/increase-font-size ()
(interactive)
(set-face-attribute 'default
(selected-frame)
:height
(ceiling (* 1.10
(face-attribute 'default :height)))))
(defun sacha/decrease-font-size ()
(interactive)
(set-face-attribute 'default
nil
:height
(floor (* 0.9
(face-attribute 'default :height)))))
(global-set-key (kbd "C-+") 'sacha/increase-font-size)
(global-set-key (kbd "C--") 'sacha/decrease-font-size)
;muse mode mappings
(add-to-list 'load-path "C:/emacs/Muse/muse-latest/lisp/")
(require 'muse-mode)
(require 'muse-latex)
(require 'muse-book)
(require 'muse-html)
(require 'muse-colors)
;To do list mode config
(add-to-list 'load-path "C:/emacs/lisp/")
(autoload 'todo-list-mode "todo-list-mode") ;load when needed
;a simple function that opens the file,
;and switches to todo-list-mode.
(defun open-todo-list ()
(interactive)
(find-file "D:/AbhisLife/Tasks/TODO")
(todo-list-mode))
;then bind to control-f12 so i can call it with one keystroke
;this works well for me because i also bind calendar to f12
(global-set-key [C-f12] 'open-todo-list)
;Python development
(require 'smart-operator)
(add-to-list 'load-path "~/.emacs.d/")
(require 'yasnippet)
(yas/initialize)
(yas/load-directory "~/.emacs.d/snippets/")
(require 'auto-complete)
(global-auto-complete-mode t)
;(require 'init-auto-complete)
(load-library "init_python")
这是我的init_python.el
(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)
(smart-operator-mode-on)
))
;; 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 "C:/Python26/MyDownloads/Pymacs/"))
(pymacs-load "ropemacs" "rope-")
(setq ropemacs-enable-autoimport t)
;(setq yas/trigger-key (kbd "C-c <kp-multiply>"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 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)))
(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
;(require 'flymake)
;;===== PyFlakes
;; code checking via pyflakes+flymake
;(load-file "C:/.emacs.d/flymake-cursor.el")
;Commented because this is giving mea problem
;(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 'init_python)
答案 0 :(得分:5)
终于开始工作了!
感谢phils指点我正确的方向。谷歌搜索后,找到this并在谷歌翻译的帮助下(页面是俄语)能够最终使语法检查工作!
英文详情:
按常规方式安装pyflakes后,请执行以下操作:
使用以下代码在runpyflakes.py
中创建名为_YourPythonRootDir_\Scripts
的文件:
from pyflakes.scripts.pyflakes import main main()
使用以下行在_YourPythonRootDir_\Scripts
中创建名为“pyflakes.bat”的文件:
@_YourPythonRootDir_\python.exe _YourPythonRootDir_\Scripts\runpyflakes.py %*
将_YourPythonRootDir_\Scripts
添加到“路径”环境变量
问题已解决!!!
注意:_YourPythonRootDir_
=系统上Python根目录的路径。在我的C:\Python26\
感谢Phils,Starkey和gelvaos当然!!!
答案 1 :(得分:2)
如果您在那些说明中使用apt-get,那么我不认为这是一个权限问题*,所以听起来像emacs只是看不到可执行文件。
flymake调用start-process
查找exec-path
目录中的程序( Ch v exec-path
RET < / KBD>)
您可以在.emacs中添加(add-to-list 'exec-path "~/bin")
之类的内容,以使相应的目录可见。
(*)如果您没有使用软件包管理器OTOH安装它,那么我也会检查权限。