【发布时间】:2010-11-18 14:16:00
【问题描述】:
为了在 python 模式下检查代码,我使用 flymake 和 pyflakes
我还想用 pylint 检查代码样式(pep8)(与 pyflakes 在同一页上的描述)
此解决方案有效。 但是我无法将 flymake 配置为与 pyflakes 和 pylint 一起使用。 我该怎么做?
【问题讨论】:
标签: python emacs pylint pep8 pyflakes
为了在 python 模式下检查代码,我使用 flymake 和 pyflakes
我还想用 pylint 检查代码样式(pep8)(与 pyflakes 在同一页上的描述)
此解决方案有效。 但是我无法将 flymake 配置为与 pyflakes 和 pylint 一起使用。 我该怎么做?
【问题讨论】:
标签: python emacs pylint pep8 pyflakes
您可能想在此处查看 Lisp 脚本 (http://charlie137-2.blogspot.com/2009/08/check-python-coding-style-on-fly-with.html),它应该有助于检查 PEP8 a la pep8.py。我不使用 pyflakes 或 pylint,但我想您可以轻松调整它以与其他检查器一起使用。
【讨论】:
好吧,flymake 只是在寻找一个可执行命令,它以预定义的格式输出行。例如,您可以制作一个 shell 脚本,它将连续调用您想要的所有检查器...
您还必须确保您的脚本以返回错误级别 0 结束。这是一个示例:
这是我在“pycheckers”脚本中所做的:
#!/bin/bash
epylint "$1" 2>/dev/null
pyflakes "$1"
pep8 --ignore=E221,E701,E202 --repeat "$1"
true
对于 emacs lisp 部分:
(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 "pycheckers" (list local-file))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.py\\'" flymake-pyflakes-init)))
【讨论】:
pycheckers 二进制文件是可执行的,并在emacs 脚本中指定完整的绝对路径或更简单,确保pycheckers 位于$PATH 中列出的目录之一中.每次对文件进行更改时都会调用它。欲了解更多信息,请查看goo.gl/xxkOY
通常可以在 python-mode-hook 中启用 flymake 模式。不幸的是,这会导致诸如 py-execute-buffer 之类的问题,它会创建临时缓冲区,这些缓冲区会调用钩子,然后由于缺少“真实文件”而导致 flymake 模式打嗝。解决方案是修改添加钩子的条件:-例如我的是:
(add-hook 'python-mode-hook
(lambda ()
(unless (eq buffer-file-name nil) (flymake-mode 1)) ;dont invoke flymake on temporary buffers for the interpreter
(local-set-key [f2] 'flymake-goto-prev-error)
(local-set-key [f3] 'flymake-goto-next-error)
))
【讨论】:
(local-set-key [f4] 'flymake-display-err-menu-for-current-line)
f2或f3不同的键绑定
vaab的pychechkerWindows批处理版
@echo on
pylint %1
pep8 --ignore=E221,E701,E202 --repeat %1
pyflakes %1
【讨论】: