如何在vim中使用pylint

我不想安装另一个插件,如pylint.vim,

今天,我决定使用vim编辑python而不是pyclipse,这是一个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认为它编译成功

=========================新评论=========== 在Vim的`autocmd`命令中调用一个函数

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

 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 

为什么如此复杂的SED,只是在Linux上正常工作? 尝试以下操作:

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

pylint.vim比较老,用合成代替:

https://github.com/scrooloose/syntastic

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

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

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

epylint(与pylint一起发货)是在emacs(与flymake)中使用的。 它有一些变化,尤其是在路径处理方面,请参阅pylint / epylint.py开始处的文档字符串以获取更多信息。 它也可以帮助你在vim中。

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

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