我不想安装另一个插件,如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
比较老,用合成代替:
最后我自己解决。 我想和大家分享一下。 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