关于linux:如何在vim中使用pylint

how to use pylint in vim

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

今天,我决定使用vim edit python代替ecdevse插件pydev。 但是我遇到了问题。

我已经在我的vimrc中添加了

1
autocmd BufWritePost *.py !pylint

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

1
2
3
4
************* Module mymodule
E: 22: invalid syntax

shell return 2

所以它不能跳到第22行,所以我用sed更改了输出

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

它返回:

1
mymodule.py:22: E: : invalid syntax

但是没有shell,vim返回2。 因此它仍然无法跳到那条线。 vim认为编译成功

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

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

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

当我保存时,vim返回:

1
2
3
4
5
6
************* 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]\+\)/:\2:
\1: /g

为什么这么复杂,而sed只能在Linux上正常工作?请尝试以下操作:

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


pylint.vim很旧,请使用合成词:

https://github.com/scrooloose/syntastic


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

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


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

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


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

autocmd BufWritePost * .py使

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

autocmd BufWritePost * .py使


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

epylint(与pylint一起提供)是emacs(与flymake)一起使用的一种。它有一些更改,尤其是关于路径处理的更改,有关更多信息,请参见pylint / epylint.py开头的docstring。它也可能对您有所帮助。

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