美文网首页
使用vim打造强大的Python开发环境

使用vim打造强大的Python开发环境

作者: WeiFong | 来源:发表于2020-03-18 23:19 被阅读0次

    特别说明:

    • 基于现在有不少童鞋开始捣鼓服务器或虚拟机(linux)进行python项目的开发,虽然可以使用pycharm的远程调试功能编写代码及调度,但难免有些特殊情况下仍旧不方便,所以特以此篇教程,让大家的vim可以像IDE那样方便的编辑python代码。
    • 只篇我只对centos7系统验证过,其它系统需要自己摸索,也许使用以下方法也可以正常使用。祝大家都可以成功的应用上此功能。^^

    * 升级vim到vim8

    YouCompleteMe目前只支持7.4.1578+以上的版本,常规使用yum安装只能安装到7.4 , 因此建议使用以下方法升级到vim8

    # 支持库
    yum install perl-ExtUtils-MakeMaker -y
    yum -y install perl-devel perl-ExtUtils-Embed
    # 下载最新vim
    cd /home/
    git clone https://github.com/vim/vim.git
    cd ./vim/src
    # 编译安装
    make clean
    ./configure --prefix=/usr/local/vim8 --with-features=huge --enable-python3interp --enable-pythoninterp --with-python-config-dir=/usr/lib64/python2.7/config --enable-rubyinterp --enable-luainterp --enable-perlinterp --with-python3-config-dir=/usr/local/python3/lib/python3.8/config-3.8-x86_64-linux-gnu --enable-multibyte --enable-cscope
    make && make install
    # 查看版本信息
    /usr/local/vim/bin/vim
    # 软链接
    ln -s /usr/local/vim8/bin/vim /usr/bin/vim
    

    1. 安装vim及支持库

    yum install vim
    

    已安装了vim的,你要确保已经满足以下两点要求:

    • Vim编辑版本应该大于7.3。
    • 支持Python语言。在所选编辑器的功能中,确保你看到了+python。(可通过命令 vim --version 查看)

    如果满足上述要求,接下来可以安装Vim扩展了。如果不满足,则需要 [安装/升级]


    2. 安装Vim扩展工具

    这里我推荐使用 Vundle,你可以把它想象成Vim的pip。有了Vundle,安装和更新包这种事情不费吹灰之力。

    1. 安装Vundle:
    # 该命令将下载Vundle插件管理器,并将它放置在你的Vim编辑器bundles文件夹中。
    git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
    
    1. 将配置文件添加到你的用户的home文件夹中:
    vi ~/.vimrc
    
    1. 把下面的Vundle配置添加到配置文件,保存并退出:
    set nocompatible              " required
    filetype off                  " required
    
    " set the runtime path to include Vundle and initialize
    set rtp+=~/.vim/bundle/Vundle.vim
    call vundle#begin()
    
    " alternatively, pass a path where Vundle should install plugins
    "call vundle#begin('~/some/path/here')
    
    " let Vundle manage Vundle, required
    Plugin 'gmarik/Vundle.vim'
    
    " Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)
    
    " All of your Plugins must be added before the following line
    call vundle#end()            " required
    filetype plugin indent on    " required
    

    这样,你就完成了使用Vundle前的设置。之后,将你需要安装的插件添加到.vimrc 配置文件中(怎么添加后面有介绍),你就可以使用它安装插件.

    # 在vim浏览模式中输入以下命令回车即可,它将自动安装插件或更新
    :PluginInstall
    

    3. 开始打造你的IDE吧

    这里不可能列举Vim的全部功能,只能快速介绍一些Vim自带的强大功能,它们对于Python开发来说是非常有用的。

    • 扔掉鼠标
      或许,Vim编辑器最重要的功能就是它不要求使用鼠标(除了GUI版本外)。一开始,你可能会觉得这是个非常糟糕的做法,但是只要你投入时间——是的,这很花时间——学习快捷组合键,就可以大幅提升工作流的速度。

    3.1 分割布局(Split Layouts)

    • 效果展示
      分割布局
      使用:sv <filename>命令打开一个文件,你可以纵向分割布局(新文件会在当前文件下方界面打开),使用相反的命令:vs <filename>, 你可以得到横向分割布局(新文件会在当前文件右侧界面打开)。
    • 你还可以嵌套分割布局,所以你可以在分割布局内容再进行分割,纵向或横向都可以,直到你满意为止。众所周知,我们开发时经常需要同时查看多个文件。


      嵌套分割布局

    小建议

    • 记得在输入完:sv 或:vs后,利用tab补全功能,快速查找文件。
    • 快捷键切换分割窗口
      将下面的代码添加到.vimrc文件中,可以通过组合快捷键进行切换
    " 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>
    

    切换窗口快捷键组合

    • Ctrl-j 切换到下方的分割窗口
    • Ctrl-k 切换到上方的分割窗口
    • Ctrl-l 切换到右侧的分割窗口
    • Ctrl-h 切换到左侧的分割窗口

    换句话说, 按Ctrl+Vim的标准移动键,就可以切换到指定窗口

    • 指定区域分割布局
      你还可以指定屏幕上可以进行分割布局的区域(需要进行上面的配置 快捷键切换分割窗口),只要在.vimrc文件中添加下面的代码即可:
    set splitbelow
    set splitright
    

    3.2 缓冲区(Buffers)

    虽然Vim支持tab操作,仍有很多人更喜欢缓冲区和分割布局。你可以把缓冲区想象成最近打开的一个文件。Vim提供了方便访问近期缓冲区的方式,只需要输入:b <buffer name or number>,就可以切换到一个已经开启的缓冲区(此处也可使用自动补全功能)。你还可以通过ls命令查看所有的缓冲区。

    在:ls命令输出的最后,Vim会提示“敲击Enter继续查看”,这时你可以直接输入:b <buffer name>,立即选择缓冲区。这样可以省掉一个按键操作,也不必去记忆缓冲区的名字。


    3.3 代码折叠(Code Folding)

    大多数“现代”集成开发环境(IDE)都提供对方法(methods)或类(classes)进行折叠的手段,只显示类或方法的定义部分,而不是全部的代码。

    你可以在.vimrc中添加下面的代码开启该功能:

    " Enable folding
    set foldmethod=indent
    set foldlevel=99
    

    这样就可以实现,但是你必须手动输入za来折叠(和取消折叠)。使用空格键会是更好的选择。所以在你的配置文件中加上这一行命令:

    " Enable folding with the spacebar
    nnoremap <space> za
    

    第一个命令,set foldmethod=indent会根据每行的缩进开启折叠。但是这样做会出现超过你所希望的折叠数目。有几个扩展就是专门解决这个问题的。在这里我们使用SimplyFold。在.vimrc中加入下面这行代码,通过Vundle进行安装:

    Plugin 'tmhedberg/SimpylFold'
    

    不要忘记在vim中执行安装命令::PluginInstall 执行后稍等片刻,看到done就可以了
    现在你可以轻松地隐藏掉那些当前工作时不需要关注的代码了,在需要进行折叠的地方按空格键即可(记得是在vim的浏览模式下),折叠后的效果如下。

    折叠后的效果,不显示dosstring

    如果希望在折叠后能看到dosstring文档字符串, 可以在.vimrc中加入下面的代码

    let g:SimpylFold_docstring_preview=1
    
    折叠后的效果,显示dosstring

    3.4 Python代码缩进

    当然,想要代码折叠功能根据缩进情况正常工作,那么你就会希望自己的缩进是正确的。这里,Vim的自带功能无法满足,因为它实现不了定义函数之后的自动缩进。我们希望Vim中的缩进能做到以下两点:

    • 首先,缩进要符合PEP8标准。

    • 其次,更好地处理自动缩进。

    3.4.1 PEP8

    要支持PEP8风格的缩进,请在.vimrc文件中添加下面的代码:

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

    这些设置将让Vim中的Tab键就相当于4个标准的空格符,确保每行代码长度不超过80个字符,并且会以unix格式储存文件,避免在推送到Github或分享给其他用户时出现文件转换问题。

    另外,对于全栈开发,你可以设置针对每种文件类型设置au命令:

    au BufNewFile,BufRead *.js, *.html, *.css
    \ set tabstop=2 |
    \ set softtabstop=2 |
    \ set shiftwidth=2
    
    
    3.4.2 自动缩进

    自动缩进有用,但是在某些情况下(比如函数定义有多行的时候),并不总是会达到你想要的效果,尤其是在符合PEP8标准方面。我们可以利用indentpython.vim插件,来解决这个问题:

    Plugin 'vim-scripts/indentpython.vim'
    

    不要忘记执行安装命令::PluginInstall

    3.4.3 标示不必要的空白字符

    我们希望避免出现多余的空白字符。可以让Vim帮我们标示出来,使其很容易发现并删除。

    hi BadWhitespace guifg=gray guibg=red ctermfg=gray ctermbg=red
    au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/
    

    这会将多余的空白字符标示出来,很可能会将它们变成红色突出。

    3.4.4 支持UTF-8编码

    大部分情况下,进行Python开发时你应该使用UTF-8编码,尤其是使用Python 3的时候。确保Vim设置文件中有下面的命令:

    set encoding=utf-8
    

    3.5 Python代码自动补全

    支持Python自动补全的最好插件是YouCompleteMe,其实YouCompleteMe底层使用了一些不同的自动补全组件(包括针对Python开发的Jedi),另外要安装一些C库才能正常工作。插件官方文档提供了很好的[安装指南]

    yum -y install build-essential cmake python3-dev
    yum -y install python3-devel
    

    ,先将下面的代码添加到.vimrc配置文件中,然后再次使用Vundle安装,:

    Bundle 'Valloric/YouCompleteMe'
    

    不要忘记执行安装命令(安装等待时间会有点长,耐心等待会)::PluginInstall
    如果安装时报以下错误,说明要使用YouCompleteMe插件,vim版本不能低于7.4.1578+,需要进行升级:

    YouCompleteMe unavailable:requires vim 7.4.1578+
    

    注意事项:如果使用Veundle安装失败,可尝试使用install.py安装

    • install.py # 仅安装支持Python的版本
    • install.py --clang-completer # 安装支持C语言家族的版本
    • install.py --all # 安装支持Js、Java、Python、go所有语言的版本
    git clone https://github.com/ycm-core/YouCompleteMe.git ~/.vim/bundle/YouCompleteMe
    cd ~/.vim/bundle/YouCompleteMe
    git submodule update --init --recursive
    python3 install.py
    

    通常python3 install.py 都会出错的,因为通过编译方式安装的python3,大多数人都没有加上这个参数 --enable-shared ,所以会这个参数问题的提示,看到后只能通过重新编译安装一次python3

    • 重新编译安装python3 (通过Veundle插件管理工具安装成功的可以跳过此步骤)
      • 下载安装包
    # 这里需要下载最好跟原来安装的python3同一个版本
    cd /home/
    wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz
    
    • 解压
    tar -xvJf  Python-3.8.2.tar.xz
    
    • 安装
    cd Python-3.8.2
    ./configure --enable-shared --prefix=/usr/local/python3 --enable-optimizations --with-ssl
    make && make install
    
    • 这里还会出现缺 libpython3.8.so.1.0 包的问题,导致python3的命令无法执行,从python3的安装目录下拷贝到系统lib目录就行了
    cp /usr/local/python3/lib/libpython3.8.so.1.0 /usr/lib64
    cp /usr/local/python3/lib/libpython3.8.so.1.0 /usr/local/lib64/
    

    到这里YouCompleteMe代码补全的插件就已经安装好,插件自带的设置效果就很好,但是我们还可以进行一些小的调整:

    let g:ycm_autoclose_preview_window_after_completion=1
    map <leader>g  :YcmCompleter GoToDefinitionElseDeclaration<CR>
    

    上面的第一行确保了在你完成操作之后,自动补全窗口不会消失,第二行则定义了“转到定义”的快捷方式。

    3.6 支持Virtualenv虚拟环境

    上面“转到定义”功能的一个问题,就是默认情况下Vim不知道virtualenv虚拟环境的情况,所以你必须在配置文件中添加下面的代码,使得Vim和YouCompleteMe能够发现你的虚拟环境:

    "python with virtualenv support
    py << EOF
    import os
    import sys
    if 'VIRTUAL_ENV' in os.environ:
      project_base_dir = os.environ['VIRTUAL_ENV']
      activate_this = os.path.join(project_base_dir, 'bin/activate_this.py')
      execfile(activate_this, dict(__file__=activate_this))
    EOF
    
    

    这段代码会判断你目前是否在虚拟环境中编辑,然后切换到相应的虚拟环境,并设置好你的系统路径,确保YouCompleteMe能够找到相应的site packages文件夹。

    相关文章

      网友评论

          本文标题:使用vim打造强大的Python开发环境

          本文链接:https://www.haomeiwen.com/subject/ofcqyhtx.html