特别说明:
- 基于现在有不少童鞋开始捣鼓服务器或虚拟机(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,安装和更新包这种事情不费吹灰之力。
- 安装Vundle:
# 该命令将下载Vundle插件管理器,并将它放置在你的Vim编辑器bundles文件夹中。
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
- 将配置文件添加到你的用户的home文件夹中:
vi ~/.vimrc
- 把下面的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文档字符串, 可以在.vimrc中加入下面的代码
折叠后的效果,显示dosstringlet g:SimpylFold_docstring_preview=1
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文件夹。
网友评论