【问题标题】:How can I use Emacs Flymake mode for python with pyflakes and pylint checking code?如何将 Emacs Flymake 模式用于带有 pyflakes 和 pylint 检查代码的 python?
【发布时间】:2010-11-18 14:16:00
【问题描述】:

为了在 python 模式下检查代码,我使用 flymake 和 pyflakes

我还想用 pylint 检查代码样式(pep8)(与 pyflakes 在同一页上的描述)

此解决方案有效。 但是我无法将 flymake 配置为与 pyflakes 和 pylint 一起使用。 我该怎么做?

【问题讨论】:

    标签: python emacs pylint pep8 pyflakes


    【解决方案1】:

    您可能想在此处查看 Lisp 脚本 (http://charlie137-2.blogspot.com/2009/08/check-python-coding-style-on-fly-with.html),它应该有助于检查 PEP8 a la pep8.py。我不使用 pyflakes 或 pylint,但我想您可以轻松调整它以与其他检查器一起使用。

    【讨论】:

    • 我尝试使用 pep8.py。同样的问题 - 我无法更正合并两个配置。只工作一个 - pyflakes 或 pep8.py。
    【解决方案2】:

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

    【讨论】:

    • 虽然我可以看到 hilited 错误,但 emacs 23 并未显示错误的实际含义。你能帮忙吗?
    • 参见emacs下flymake的手册。您需要在线并且: M-x flymake-display-err-menu-for-current-line 。你可以把它绑定到一个键上。
    • 最好的方法是使用flymake-cursor。需要敲击键或悬停鼠标来查看已经字体化的错误行上的错误是相当愚蠢的。 flymake-cursor 在状态栏中回显错误。我目前的设置运行良好:- richardriley.net/projects/emacs/dotprogramming#sec-1.5
    • 我写了一篇关于这个主题的博文。针对不同语言(python、php、javascript)提供了多检查器示例goo.gl/xxkOY
    • @dustin 确保pycheckers 二进制文件是可执行的,并在emacs 脚本中指定完整的绝对路径或更简单,确保pycheckers 位于$PATH 中列出的目录之一中.每次对文件进行更改时都会调用它。欲了解更多信息,请查看goo.gl/xxkOY
    【解决方案3】:

    通常可以在 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)
    • 我可以设置与f2f3不同的键绑定
    【解决方案4】:

    vaab的pychechkerWindows批处理版

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

    【讨论】:

      猜你喜欢
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      相关资源
      最近更新 更多