24

我不想安装另一个插件,比如 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 认为编译成功

========================== 新注释=========== 在 Vim 的 `autocmd` 命令中调用函数

我想也许我应该使用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 
4

7 回答 7

29

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

set makeprg=pylint\ --reports=n\ --output-format=parseable\ %:p
set errorformat=%f:%l:\ %m
于 2010-10-01T21:53:07.973 回答
16

pylint.vim是旧的,请改用语法:

https://github.com/scrooloose/syntastic

于 2010-10-01T13:19:55.873 回答
4

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

autocmd FileType python let &makeprg='pylint %\|sed "s/^\(\w*\):\s*\([0-9]\+\)/%:\2:\ \1:\ /g"'
autocmd BufWritePost *.py make 
于 2010-10-01T16:02:52.993 回答
3

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

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

于 2018-08-03T05:00:49.117 回答
0

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

autocmd BufWritePost *.py make

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

autocmd BufWritePost *.py make

于 2017-05-17T09:00:58.880 回答
0

现在 vimpylint. 这意味着如果您启用了文件类型检测 ( filetype plugin indent on),则无需外部插件即可使用。

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

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

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

于 2021-01-21T14:18:41.640 回答
-1

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

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

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

于 2010-11-23T07:38:12.753 回答