【问题标题】:how to use pylint in vim如何在 vim 中使用 pylint
【发布时间】:2011-04-19 20:40:23
【问题描述】:

我不想安装其他插件,例如 pylint.vim,

今天,我决定使用 vim edit python 而不是 pydev,它是一个 Eclipse 插件。但我遇到了问题。

我已经在我的 vimrc 中添加了这个

autocmd BufWritePost *.py !pylint <afile>

但是 pylint 在输出中不包含文件名

************* Module mymodule
E: 22: invalid syntax

shell return 2

所以不能跳转到第22行,所以我用sed改变输出

autocmd BufWritePost *.py !pylint <afile> | sed 's/^\(\w*\):\s*\([0-9]\+\)/<afile>:\2: \1: /g'

它返回:

mymodule.py:22: E: : invalid syntax

但没有 shell 由 vim 返回 2。所以它仍然不能跳到那条线。 vim 认为编译成功

========================== 新评论=========== Call a function in Vim’s `autocmd` command

我想也许我应该使用make命令并设置makeprg,所以我使用下面的配置

autocmd FileType python let &makeprg='pylint <afile> | sed s/^\(\w*\):\s*\([0-9]\+\)/<afile>:\2: \1: /g'
autocmd BufWritePost *.py make

当我保存时,vim 返回:

************* Module count
E:  3: invalid syntax
(1 of 2): ************* Module count
Error detected while processing BufWritePost Auto commands for "*.py":
E492: Not an editor command:  sed s/^\(\w*\):\s*\([0-9]\+\)/<afile>:\2: 
\1: /g 

【问题讨论】:

    标签: linux vim sed pylint


    【解决方案1】:

    现在 vim 发布了 compiler file for pylint。 这意味着如果您启用了文件类型检测 (filetype plugin indent on),则无需外部插件即可使用。

    :set makeprg? 应该告诉你 pylint 是在发出:make 时将被调用的。如果没有,则需要使用:compiler! pylint 将其设置为当前编译器。

    现在,要使其正常工作,您需要传递一些参数,以便 pylint 知道要 lint 什么,最值得注意的是 what 您要 lint,即要链接的文件名或目录。因此,要检查当前缓冲区,请运行 :make %。要检查当前目录,请运行 :make .

    同样的机制可以扩展到使用 flake8,或者任何类型的文件的任何 linter。见:h :compiler

    【讨论】:

      【解决方案2】:

      我建议使用 A.L.E(异步 Lint 引擎)https://github.com/w0rp/ale

      它支持一系列 python linter 和格式化程序,包括 pylint。 A.L.E 的优点在于它支持许多其他语言。

      【讨论】:

        【解决方案3】:

        autocmd FileType python let &makeprg='/usr/local/bin/pylint %'

        autocmd BufWritePost *.py make

        autocmd FileType python let &makeprg='/usr/local/bin/pyflakes %'

        autocmd BufWritePost *.py make

        【讨论】:

          【解决方案4】:

          pylint.vim 已旧,请改用语法:

          https://github.com/scrooloose/syntastic

          【讨论】:

          • 比单纯的链接更重要的东西会得到支持。
          • 防止链接失效。
          • 上面的 Vim 插件没有维护。这个 fork 旨在与 pylint 保持同步。 github.com/orenhe/pylint.vim
          • 谢谢,syntastic has many checkersBanditflake8FrostedmypyProspectorpy3kwarnpycodestylepydocstylePylamaPylintpython,哪个是默认的?
          【解决方案5】:

          为什么在 Linux 上正常运行的 sed 这么复杂?请尝试以下操作:

          set makeprg=pylint\ --reports=n\ --output-format=parseable\ %:p
          set errorformat=%f:%l:\ %m
          

          【讨论】:

          • 谢谢。正是我想要的。但是,%:p 是什么意思。而且errorformat是vim变量,怎么会影响pylint?
          • %:p 表示使用文件的完整路径
          • 很好的答案。但是 --output-format 现在是 pylint 1.0.0 中已弃用的选项。另一种方法是使用set makeprg=pylint\ --reports=n\ --msg-template=\"{path}:{line}:\ {msg_id}\ {symbol},\ {obj}\ {msg}\"\ %:p
          • 像魅力一样工作! $ pylint --version No config file found, using default configuration pylint 1.4.4, astroid 1.3.8, common 1.1.0 Python 3.4.3 (default, Oct 14 2015, 20:28:29) [GCC 4.8.4]
          【解决方案6】:

          您可能想尝试运行 epylint 而不仅仅是 pylint。

          epylint(与 pylint 一起提供)是在 emacs(与 flymake 一起)中使用的一种。它有一些更改,特别是关于路径处理,请参阅 pylint/epylint.py 开头的文档字符串以获取更多信息。它也可以帮助你在 vim 中。

          旁注:我不是自己编程的 vim 用户,但 pylint.vim 似乎仍然是一个不错的选择。但我不会质疑你的先决条件。

          【讨论】:

            【解决方案7】:

            最后我自己解决了。想和大家分享一下。 vimrc 中的 2 行。

            autocmd FileType python let &makeprg='pylint %\|sed "s/^\(\w*\):\s*\([0-9]\+\)/%:\2:\ \1:\ /g"'
            autocmd BufWritePost *.py make 
            

            【讨论】:

            • 我已经用 jceb 的回答了
            • 感谢我能够使用它并寻找更长的时间。但我觉得应该更新一下。如果pylint报告任何错误,我们可以分屏吗?现在如果是大错误并丢失此信息
            • 我可以使用它,但如果我遇到任何可能的错误,我想拆分错误
            猜你喜欢
            • 2015-11-04
            • 2020-10-09
            • 2010-09-12
            • 1970-01-01
            • 1970-01-01
            • 2013-01-09
            • 1970-01-01
            • 1970-01-01
            • 2020-07-22
            相关资源
            最近更新 更多