vim autoformat php,将Vim打造成Python IDE(二):代码格式化的一些问题

写完 《将Vim打造成Python IDE(一):解决80%的问题》 这篇文章后,不代表我就完全会使用Vim编写 Python 代码了,只是一个入门,了解了某些插件能解决的问题,以及这些插件的大概用法,如果要真正掌握,还得实践。

这些天写了些代码,对插件使用也更有体会了,今天主要讲讲和代码格式有关的一些插件。

其实也有很多同学提供了其他Python IDE,那为什么我还要坚持用Vim?大概有这几方面原因:

1:Vim是所有平台上直接支持的软件,尤其和 Linux 联系的非常紧密,大部分软件,只要涉及到文件操作,都可以通过Vim打开,也就是说通用性非常好。

2:经常使用ssh命令行操作Linux,没有桌面环境,在这种情况下,Vim就显得优势非常大了,拿来即用。

3:Vim本身性能,功能方面也非常完善,确实是一个很好的软件,而且是命令行方式的,很多操作和Shell很相似,比如正则表达式的操作,通过它能够以一种更好的方式掌握编程。

4:不要浅尝辄止,如果觉得Vim有用,那就精益求精,不说掌握100%,也应该掌握50%,系统性的学习能够更深入的理解原理,这样再去学其他的IDE,就会更有心得,也就是说,不管学什么,在内心总要留下一点印记。

接下去步入正题,在Python编码中,很重要的就是代码的样式和语法,写出规范的代码很重要,是否能够找出一些语法和样式错误?如果有插件能解决这二个问题,那是极好的。

在Vim插件中,目前我使用了三个插件,分别是是vim-flake8 【1】,vim-syntastic 【2】,vim-autoformat 【3】,前二个插件功能是相识的,就是告诉你代码样式和语法哪儿有问题,最后那个插件是自动格式化代码样式(不能修复语法错误)。另外需要注意的是,代码缩进不属于样式问题,所以没有办法自动修复。错误语法和样式的概念也比较宽泛,比如 import 一个模块,但这个模块没有用到,也会警告你。

vim-flake8,vim-syntastic这二个插件最后我选择的是vim-syntastic,主要是这个插件能够应用于很多开发语言(比如Java,PHP),而vim-flake8是专用于Python的。

vim-flake8依赖于Flake8工具,Flake8包装了PyFlakes和PEP8,PyFlakes是Python 中的一个静态语法和样式检查工具,PEP8是语法检查工具。

vim-flake8替代了vim-pyflakes,vim-pep8这二个插件。

了解了这些背景后,看看vim-flake8有什么功能,这在上一篇中讲过:

#F2显示语法错误

autocmd FileType python map :call Flake8()

#保存文件的时候显示错误

autocmd BufWritePost *.py call flake8#Flake8()

#是否显示标记

let g:flake8_show_in_file=1

接下去描述vim-syntastic,这个插件功能比较齐全,通过外部工具,能够检查各种开发语言的语法和样式问题。

这个 工具 会在屏幕中以各种形式显示错误,如下图:

63f8d12ba64b9db4405a4c3accf9a8eb.png

location list(也有叫法 errors list )显示各类错误

如果鼠标悬浮在错误行上,详细的错误信息会在 command window 显示

错误行会打上 Signs 标记

statusline flag 会显示从哪行开始有错误,应该有多少个错误。

vim-syntastic官方使用Pathogen插件管理器演示如何安装,在上文中我使用Vundle安装 Pathogen,其实从Vim 7.4以后无需第三方插件管理器就能安装插件了。

vim打开一个Python文件,然后在编辑模式下输入:SyntasticInfo

a2b367c8b67f34ae4c0d87ffe3f0d168.png

可以看到目前处理的文件类型是 python,将自动(主动模式)检测语法和样式错误,使用的检测工具是flake8, 支持的检查工具包括flake8,pyflakes等等,上述内容对于理解vim-syntastic很有帮助。

接下去说说vim-syntastic的一些用法,其实我琢磨了很久,可见官方也没有说清楚。

vim-syntastic有两种模式,主动模式和被动模式。所谓主动模式,就是会主动运行 vim-syntastic进行语法和样式检测,比如打开文件,或者:w保存文件的时候会主动检测。

如果不想打开文件的时候就主动进行检测(但也处于主动模式之下),可以编辑 ~/.vimrc:

let g:syntastic_check_on_open = 0

其实如果一个文件错误太多,location list窗口就会很大,看上去很不舒服(至少我是这样的),那么可以通过两种方法关闭它,第一就是编辑 ~/.vimrc:

let g:syntastic_auto_loc_list = 0

或者在Vim编辑模式下输入:lclose关闭它,如果还想打开,可以输入:Error。

接下去说说被动模式,可以编辑~/.vimrc设置快捷键:

map s :SyntasticToggleMode

这样按 +s 键就会在主动和被动模式之间切换(也可以手动输入:SyntasticToggleMode),在 command window上会显示:

Syntastic: passive mode enabled

在被动模式下,你必须手动输入:SyntasticCheck flake8 手动检测语法和格式。

另外vim-syntastic用法非常多,输入:help syntastic 可以查看详细信息(shift + * 可以跳转)。

vim-autoformat插件是最有用的,可以自动格式化代码,它也依赖于第三方格式化工具,比如 autopep8(pip3 install autopep8)。

也可以使用yapf(pip3 install yapf)进行格式化,如果在待检查文件的目录中存在.style.yapf或setup.cfg文件,就会使用 yapf格式化

配置~/.vimrc,选择特定的格式化样式:

let g:formatter_yapf_style = 'pep8' #也可以是google, facebook, chromium

vim-autoformat支持部分代码格式化(但我没试出来,是整个文件格式化),也可以对特定目录的文件进行格式化,比如配置~/.vimrc:

let g:formatterpath = ['folder1', 'folder2']

在 《将Vim打造成Python IDE(一):解决80%的问题》 这篇文章提到过,如果用vim8格式化代码会保存,为解决这问题,我还专门了提了个issue 【4】,作者认为不是vim-autoformat的问题,而是vim的问题,不过使用vim7.4不会有问题。

考虑到vim7也能运行python3,而且pep8在python2或python3 上也没有太大问题,所以就凑合用吧,遗留的一个问题就是vim8内置的 python3 到底有何用处呢?

[1] https://github.com/nvie/vim-flake8

[2] https://github.com/vim-syntastic/syntastic

[3] https://github.com/Chiel92/vim-autoformat

[4] https://github.com/Chiel92/vim-autoformat/issues/266

如果觉得写的还不错,希望大家以 各种形式 多多支持。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值