配置VIM的python开发环境

Vim配置python开发环境

time:2021-04-21

功能:代码提示,代码补全,语法检查,snippet补全。(支持python虚拟环境)

python3.6,python3.8都测试可用,虚拟环境下也测试过可用,python3.9在虚拟环境下可用,在系统默认的环境下无法使用全部功能

系统和软件版本:

$ vim --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Mar 26 2021 00:21:09)
Included patches: 1-2653
Compiled by Arch Linux

$ uname -a
Linux kamisama-20e0a013cd 5.10.30-1-MANJARO #1 SMP Wed Apr 14 08:07:27 UTC 2021 x86_64 GNU/Linux

插件管理器Vim-Plug

  • 通过命令行直接安装
    Unix:

这种方式可能需要代理才能使用,下载的网址貌似被墙,至少在我写这条记录的时候下载不了,墙对于gayhub的策略真是搞不懂

$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

由于这种方式下载不了,所以官网推荐的自动安装的方法不适用

  • 手动下载安装:
    将命令行里的网址复制到浏览器,访问并复制网页内容,保存为plug.vim文件,放置到.vim/autoload/目录

插件安装(加载)

~/.vimrc:

call plug#begin('~/.vim/plugged')
Plug 'prabirshrestha/vim-lsp'
Plug 'mattn/vim-lsp-settings'
Plug 'prabirshrestha/asyncomplete.vim'
Plug 'prabirshrestha/asyncomplete-lsp.vim'
Plug 'prabirshrestha/asyncomplete-ultisnips.vim'
Plug 'honza/vim-snippets'
Plug 'SirVer/ultisnips'
call plug#end()

编辑完后保存:w,执行:source %重新加载vimrc文件,执行:PlugInstall下载插件

插件配置

~/.vimrc:(配置放在插件加载之后)

if &runtimepath =~ 'asyncomplete'
" inoremap <expr> <Tab>   pumvisible() ? "\<C-n>" : "\<Tab>"
" inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
" inoremap <expr> <cr>    pumvisible() ? asyncomplete#close_popup() : "\<cr>"
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
inoremap <expr> <cr>    pumvisible() ? "\<C-y>" : "\<cr>"
imap <c-space> <Plug>(asyncomplete_force_refresh)
endif

if &runtimepath =~ 'asyncomplete-ultisnips'
    if has('python3')
    " let g:UltiSnipsExpandTrigger="<cr>"
    " ctrl + e 触发snippet
    let g:UltiSnipsExpandTrigger="<c-e>"
    let g:UltiSnipsJumpForwardTrigger="<c-b>"
    let g:UltiSnipsJumpBackwardTrigger="<c-z>"
    let g:UltiSnipsEditSplit="vertical"
    call asyncomplete#register_source(asyncomplete#sources#ultisnips#get_source_options({
        \ 'name': 'ultisnips',
        \ 'allowlist': ['*'],
        \ 'completor': function('asyncomplete#sources#ultisnips#completor'),
        \ }))
    endif
endif
if &runtimepath =~ 'vim-lsp'
nmap gd :LspDefinition<cr>
nmap <leader>f :LspDocumentFormat<cr>
let g:lsp_diagnostics_float_cursor=1
let g:lsp_diagnostics_virtual_text_enabled=1
endif

LspDocumentFormat使用的是LSP提供的代码格式化功能,pyls-all使用yapf格式化代码,编辑文件 .conf/yapf/style:

[style]
based_on_style = google
spaces_before_comment = 4
split_before_logical_operator = true

可以修改代码格式化采用的风格,上面将默认的pep8改成了google,其他配置参考yapf
上面的配置就能实现类似pycharm的代码补全功能了

插件详解:

  • vim-lsp:vim的language server protocol插件

  • vim-lsp-setting:方便配置vim-lsp的插件
    上面两个插件安装完后打开一个py文件,就会提示安装语言服务器,选择yes;或者执行:LspInstallServer pyls-all,pyls-all可以换成其他,在LspInstallServer后按<TAB>就会切换可用的语言服务器

  • asyncomplete:自动补全插件.

安装lsp后可以直接用lsp的补全功能,但是用的不是很方便,需要阅读文档后自己定制,没时间和耐心的就不合适了,所以使用自动补全插件

  • asyncomplete-lsp:让asyncomplete使用lsp的补全

  • vim-snippets:大量的snippet代码,不提供补全,所以需要补全引擎,例如:ultisnips

  • ultisnips:snippet的补全引擎

  • asyncomplete-ultisnips:将ultisnips的补全集成到asyncomplete

效果图

snippets
complete

posted on 2021-04-21 16:24  卡弥撒马  阅读(764)  评论(0)    收藏  举报

导航