我正在尝试在Windows XP上使用Pylint和Emacs。我的Emacs版本是EmacsW32 23.1,使用Python 2.5,pylint是0.21.3。在easy_install pylint之后,我将以下行添加到Emacs init文件中,复制形式为Emacs Wiki。
当我在.py文件上调用flymake-mode时,我可以看到flymake开始语法检查,模式状态变为flymake *,然后在几秒后返回到flymake。但是没有报告错误,也没有突出显示语法错误。
我尝试在命令行中使用pylint,使用命令“pylint test.py”,报告同一文件的语法错误。
我甚至试图清除我的.emacs文件,但它没有帮助。
有人可以帮我这个吗?非常感谢。
(when (load "flymake" t) (defun flymake-pylint-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 "epylint" (list local-file)))) (add-to-list 'flymake-allowed-file-name-masks '("\\.py\\'" flymake-pylint-init)))
问题更新: 我在命令行提示符下使用“pylint”和“epylint”尝试了以下操作。这是否意味着epylint有问题?
C:\Projects>pylint test_lib.py No config file found, using default configuration ************* Module test_lib E: 13: invalid syntax C:\Projects>epylint test_lib.py 'test_lib.py':1: [F] No module named 'test_lib.py' C:\Projects>epylint Traceback (most recent call last): File "C:\Python25\Scripts\epylint", line 5, in <module> pkg_resources.run_script('pylint==0.21.3', 'epylint') File "C:\Python25\Lib\site-packages\pkg_resources.py", line 489, in run_script self.require(requires)[0].run_script(script_name, ns) File "C:\Python25\Lib\site-packages\pkg_resources.py", line 1207, in run_script execfile(script_filename, namespace, namespace) File "c:\python25\lib\site-packages\pylint-0.21.3-py2.5.egg\EGG-INFO\scripts\epylint", line 3, in <module> epylint.Run() File "c:\python25\lib\site-packages\pylint-0.21.3-py2.5.egg\pylint\epylint.py", line 93, in Run lint(sys.argv[1]) IndexError: list index out of range
答案 0 :(得分:3)
flymake调用的程序应该返回0 errorlevel,否则flymake认为调用子进程有问题。
阅读this answer和those patches,我设法使用pylint运行flymake:
在Windows上,你可以在Un * x上做同样的事情,我创建了一个批处理文件pycheckers.bat
(可以在你的PATH中访问):
pylint -f parseable -r n --disable=C,R,I %1 %2 %3 %4 %5 %6 %7 %8 %9
exit /b 0
在我的.emacs中,我已经把这些行:
(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)))
现在,当我打开.py文件时,我会执行 M-x flymake-mode
来激活它。 Flymake发现我的python错误和警告没有问题。
请注意,您可以在pycheckers.bat
文件中添加其他工具。
答案 1 :(得分:0)
我在linux上使用emacs22-nox,因此您可能需要谷歌“font-lock-mode”来弄清楚如何在您的计算机上执行此操作。首先按Esc+x
输入emacs命令行。现在您可以键入font-lock-mode并按Enter键(命令行位于屏幕底部)。我的客户端服务器上遇到了同样的问题。默认情况下,他们的emacs没有打开font-lock-mode。希望有所帮助。
答案 2 :(得分:0)
这是我的两分钱......
(defun flymake-pylint-init ()
(list python-python-command
(list "-m" "pylint.lint" "-f" "parseable" buffer-file-name)))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.py\\'" flymake-pylint-init))
在WinXP,linux,OS-X上测试。