如何在vim中使用pylint

时间:2010-10-01 13:10:38

标签: linux vim sed pylint

我不想安装另一个插件,比如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返回2由vim。所以它仍然无法跳到那条线。 vim认为它是编译成功的

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

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

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 

7 个答案:

答案 0 :(得分:29)

为什么如此复杂的sed才能在Linux上正常运行?请尝试以下方法:

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

答案 1 :(得分:15)

pylint.vim已经过时,请使用合成代码:

https://github.com/scrooloose/syntastic

答案 2 :(得分:3)

最后我自己解决了。我想和你们分享。 vimrc中的2行。

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

答案 3 :(得分:1)

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

它支持一系列python linter和formatter,包括 pylint 。关于A.L.E的伟大之处在于它支持许多其他语言。

答案 4 :(得分:0)

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

epylint(随pylint一起提供)是在emacs中使用的(使用flymake)。它有一些变化,特别是关于路径处理,请参阅pylint / epylint.py开头的docstring以获取更多信息。它也可以帮助你。

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

答案 5 :(得分:0)

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

autocmd BufWritePost * .py make

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

autocmd BufWritePost * .py make

答案 6 :(得分:0)

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

:set makeprg? 应该向您展示 pylint 是在发出 :make 时将被调用的内容。如果不是,则需要使用 :compiler! pylint 将其设置为当前编译器。

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

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