我该如何使用Emacs Flymake模式,在Python中使用pyflakes和pylint检查代码?

23

为了在Python模式下检查代码,我使用带有pyflakes的flymake。

此外,我还想使用pylint(与pyflakes在同一页上描述)来检查代码风格(pep8)。

这些解决方案可以正常工作。但是我无法将flymake配置为同时使用pyflakes和pylint。应该如何操作?

4个回答

36

好的,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)))

5
最佳方式是使用flymake-cursor。在已经进行字体化的错误行上按键或悬停鼠标来查看错误信息是相当愚蠢的。flymake-cursor会在状态栏中回显错误。我的当前设置非常出色:-http://richardriley.net/projects/emacs/dotprogramming#sec-1.5 - RichieHH
1
我写了一篇博客文章涵盖了这个主题。提供了不同语言(Python、PHP、JavaScript)的多检查器示例。http://goo.gl/xxkOY - vaab
@vaab,shell脚本应该放在哪里?它会在每次打开py文件时被调用吗? - dustin
2
@dustin 确保 pycheckers 可执行,并在emacs脚本中指定完整的绝对路径,或者更简单地确保 pycheckers 在列在您的 $PATH 中的目录之一中。它将在您对文件进行每个更改时被调用。有关更多信息,请访问http://goo.gl/xxkOY。 - vaab
你是不是想说 pylint 而不是 epylint - EoghanM
显示剩余3条评论

7

通常情况下,可以在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) - Bleeding Fingers
我可以设置与 F2F3 不同的按键绑定吗? - alper

0

vaab的pychechker的Windows批处理版本

@echo on
pylint %1
pep8 --ignore=E221,E701,E202 --repeat %1
pyflakes %1

0

我尝试使用 pep8.py。同样的问题是 - 我无法正确合并两个配置文件。只有一个能工作 - pyflakes 或 pep8.py。 - dixon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接