将Vim打造成Python IDE(一):解决80%的问题

2019-05-05  本文已影响0人  虞大胆的叽叽喳喳

《Vim8支持Python3的一些坑》写完后,就真正要将Python打造成一个Python IDE了,其实我是个不愿折腾的人,也不太会折腾,也没用过太多 IDE,毕竟它不是技能,只是工具,但用好了确实能够提高效率。

之所以选择Vim,主要它是Linxu终端最方便的编辑器,有一定的通用性。但我也不想花太多的时间去学习它,毕竟学无止境,学的越多,耗费的时间也就越多,而且也不是那么好学的,比如它有很多插件,光学一个就能耗费很长时间。

所以我就找了一篇好文章(realpython.com/vim-and-python-a-match-made-in-heaven),里面讲解的内容能够解决80%的问题,这篇文章也有中文版(codingpy.com/article/vim-and-python-match-in-heaven),但必须注意的是不能只看中文版文章,因为原文更新了一些错误,而中文版没更新,我挑一些觉得重要的说明,同时本文还有一些原文没有提到的技巧。

1:自动缩进

Python对缩进要求非常严格,能够实现自动缩进(PEP8标准)是IDE最基本的功能,如果按照原文配置,会报错,需要修改如下:

au BufNewFile,BufRead *.py
    \ set tabstop=4 |
    \ set softtabstop=4 |
    \ set shiftwidth=4 |
    \ set textwidth=79 |
    \ set expandtab |
    \ set autoindent |
    \ set fileformat=unix |

2:粘帖问题

选择自动缩进后,如果从别处拷贝了一大段代码,粘帖的时候也会自动缩进,这肯定不符合需求,解决的方法可以手动处理或自动处理。

手动处理就是Vim文件后:

#打开粘帖模式
:set paste
#关闭粘帖模式
:set nopaste

自动处理就是打开~/.vimrc(Vim配置文件),然后输入:

#F3快捷键
set pastetoggle=<F3>

3:扩展安装问题

推荐使用 Vundle 进行扩展管理,没有了解扩展工作原理,大概就是从 Github 上下载,然后进行配置,安装的扩展保存在 ~/.vim/bundle 目录下。

遇到的问题就是 Github 下载不稳定,容易超时,判断是否安装成功比较笨的方法就是去 ~/.vim/bundle 目录下查看某个扩展是否有文件。

需要注意的是,如果下载失败,你从Github上手动下载的文件保存到 ~/.vim/bundle 是没用的,因为 Vundle 做了一些其他配置工作。

那么插件和原有软件关系是什么呢?比如 flake8 和 vim-flake8 是两个不同的 Github 仓库,vim-flake8 基于 flak8 做了一些工作,以便符合 Vundle 扩展要求。

如果实在下载不了扩展怎么办,我从AWS下下载了扩展,然后拷贝到我的阿里云上,这样就能成功安装。

配置待安装的插件后,必须运行 :PluginInstall 进行安装。

4:分屏功能

分屏功能确实挺炫酷,也确实有用,比如借鉴别人代码编程的时候,就可以同时打开两个窗口,结合缓存区功能,不用退出Vim窗口,就能自动切换文件打开。

"split navigations
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>

nnoremap可以重新映射快捷键,非常方便。

5:代码折叠

也是非常常用的一个功能,可以减少代码的可视区域,所以也是我经常使用的一个功能,配置快捷键可以很方便的打开和关闭折叠。

" Enable folding
set foldmethod=indent
set foldlevel=99
" 通过空格键快速打开和关闭折叠
nnoremap <space> za

6:目录树功能

这个功能也非常有用,尤其在编写一个大型项目的时候,能够在不关闭Vim窗口的情况下,查看代码目录树。

可以在~/.vimrc配置:

#F4快捷键快速切换打开和关闭目录树窗口
map <F4> :NERDTreeToggle<CR>

来回按Ctrl+w快捷键可以在目录树窗口和Vim窗口之间来回切换。

7:语法检测

这确定非常有用,能够让你自动找到代码的错误,原文介绍了两个插件,syntastic 是针对所有语言的语法检查,官方推荐的配置:

set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

当然用 vim-flake8 对 Python 进行语法检查可能是更好的,不过需要运行下列命令安装 flake8:

$ pip3 install flake8

几个有用的tips:

#F2显示语法错误
autocmd FileType python map <buffer> <F2> :call Flake8()<CR>
#保存文件的时候显示错误
autocmd BufWritePost *.py call flake8#Flake8()

8:自动格式化

其实 pep8 还是挺严格的,即使使用 vim-flake8 显示Python语法错误,但修改还是很麻烦的,所以使用自动格式化插件就很方便了,主要就是 Chiel92/vim-autoformat 扩展。

在使用这个扩展工具之前,还是要安装对应的格式化底层工具:

$ apt-get install python-autopep8

配置 Chiel92/vim-autoformat 扩展的几个tip:

noremap <F3> :Autoformat<CR>
au BufWrite * :Autoformat
let g:autoformat_autoindent = 0
let g:autoformat_retab = 0
let g:autoformat_remove_trailing_spaces = 0

需要注意的是在 Vim8和Python3.7下,会有报错:

Error detected while processing function <SNR>34_TryAllFormatters[56]..<SNR>34_TryFormatterPython3:

目前还未解决。

9:Vim编辑模式运行Python3

这个功能很有用,不用退出Vim就能运行代码,编辑 .vimrc:

map <F6> :call PRUN()<CR>
func! PRUN()
        exec "w"
        if &filetype == 'sh'
                :!time bash %
        elseif &filetype == 'python'
                exec "!clear"
                exec "!time python3 %"
        endif

直接按 F6 快捷键试下。

如果没有特殊需求,Vim7 和 Vim8 能共享所有的插件,除非有一天大部分插件用 Python3 编写了。包括 pep8 这样的规范本身和 Python版本也没多大关系,所以我还是使用 Vim7.4 进行编码,比如上述 vim-autoformat 扩展在 Python3 遇到的问题就能避免了。

本文介绍的插件相信足够使用了,绝对能解决80%的Python编程问题,当然每个扩展还有很多技巧,有需求可以继续学习。


欢迎关注我的公众号(ID:yudadanwx,虞大胆的叽叽喳喳)和书《深入浅出HTTPS:从原理到实战》。

上一篇下一篇

猜你喜欢

热点阅读