Vim 下部署Python IDE

1 简述

本文为记录在ubuntu16.04TLS环境下,将Vim打造成python IDE的部署手册。有关Vim的功能和使用方法,大家可以自行了解。网上虽然有很多的相关教程,但觉得欠缺一些关键信息,如具体环境、配置说明以及错误处理。因此,我想写一个既能完美部署Python IDE,又繁简适当的部署手册,一同和大家交流学习。

2 环境

不同环境下可能会存在一些不同。因此,我在这里详细的列出了我所使用的部署环境。

  • 操作系统:Ubuntu 16.04 TLS (Ubuntu14.04 同样适用);
  • Vim版本: 7.4 (2013. 8. 10);
  • Python版本:2.7 & 3.5 ;

3 安装过程

3.1 Vim版本号是否高于vim7.41578 ?

(1) 若未安装vim,请先安装vim,在Terminal中输入:

$ sudo apt-get update
$ sudo apt-get install vim

(2) 若已安装vim,在Terminal中输入下列命令,查看版本信息:

$ vim --version

我的版本信息显示为7.4,因此需要升级:


vimv.png

(3) 如果版本号小于vim7.41578,请先更新Vim,因为Ubuntu16.04及以下版本最高仅提供vim7.4,所以我们需要添加新的包,输入如下命令:

$ sudo add-apt-repository ppa:jonathonf/vim
$ sudo apt-get update
$ sudo apt-get install vim

更新后的版本信息为:


vimup.png

注:保证vim版本序号在vim7.41578+的主要原因,在于代码自动补全的插件包“YouCompleteMe”只有在相关版本之上才能够正确运行。否则,在运行插件时会出现如下错误:


YoucompleteMeerror.png

3.2 安装Vundle & 配置 vimrc

(1) Vundle 是Vim的一款插件管理器。在Terminal中输入:

$ sudo git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

建议使用默认路径‘~/.vim/bundle/Vundle.vim’。如果还没有安装git,请先安装:

$ sudo apt-get install git

(2) 创建Vundle配置文件.vimrc(是一个隐藏文件)

$ touch ~/.vimrc

(3) 配置vimrc,在terminal中输入:

$ sudo vim ~/.vimrc

即开始配置vim的插件信息。
请将如下信息粘贴至该文件的开始。其中“代表注释行,是一些配置vimrc的一些提示信息。

"vundle
set nocompatible
filetype off

set rtp+=~/.vim/bundle/Vundle.vim
set splitbelow
set splitright
set foldmethod=indent
set foldlevel=99
set encoding=utf-8

call vundle#begin()

Plugin 'VundleVim/Vundle.vim'
"git interface
Plugin 'tpope/vim-fugitive'
"filesystem
Plugin 'scrooloose/nerdtree'
Plugin 'jistr/vim-nerdtree-tabs'
Plugin 'kien/ctrlp.vim' 

"html
"  isnowfy only compatible with python not python3
Plugin 'isnowfy/python-vim-instant-markdown'
Plugin 'jtratner/vim-flavored-markdown'
Plugin 'suan/vim-instant-markdown'
Plugin 'nelstrom/vim-markdown-preview'
"python sytax checker
Plugin 'nvie/vim-flake8'
Plugin 'vim-scripts/Pydiction'
Plugin 'vim-scripts/indentpython.vim'
Plugin 'scrooloose/syntastic'

"auto-completion stuff
"Plugin 'klen/python-mode'
Plugin 'Valloric/YouCompleteMe'
Plugin 'klen/rope-vim'
"Plugin 'davidhalter/jedi-vim'
Plugin 'ervandew/supertab'
""code folding
Plugin 'tmhedberg/SimpylFold'

"Colors!!!
Plugin 'altercation/vim-colors-solarized'
Plugin 'jnurmine/Zenburn'

call vundle#end()

filetype plugin indent on    " enables filetype detection
let g:SimpylFold_docstring_preview = 1

"autocomplete
let g:ycm_autoclose_preview_window_after_completion=1

"custom keys
let mapleader=" "
map <leader>g  :YcmCompleter GoToDefinitionElseDeclaration<CR>
"
call togglebg#map("<F5>")
"colorscheme zenburn
"set guifont=Monaco:h14

let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree

"I don't like swap files
set noswapfile

"turn on numbering
set nu

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

"it would be nice to set tag files by the active virtualenv here
":set tags=~/mytags "tags for ctags and taglist
"omnicomplete
autocmd FileType python set omnifunc=pythoncomplete#Complete

"------------Start Python PEP 8 stuff----------------
" Number of spaces that a pre-existing tab is equal to.
au BufRead,BufNewFile *py,*pyw,*.c,*.h set tabstop=4

"spaces for indents
au BufRead,BufNewFile *.py,*pyw set shiftwidth=4
au BufRead,BufNewFile *.py,*.pyw set expandtab
au BufRead,BufNewFile *.py set softtabstop=4

" Use the below highlight group when displaying bad whitespace is desired.
highlight BadWhitespace ctermbg=red guibg=red

" Display tabs at the beginning of a line in Python mode as bad.
au BufRead,BufNewFile *.py,*.pyw match BadWhitespace /^\t\+/
" Make trailing whitespace be flagged as bad.
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/

" Wrap text after a certain number of characters
au BufRead,BufNewFile *.py,*.pyw, set textwidth=100

" Use UNIX (\n) line endings.
au BufNewFile *.py,*.pyw,*.c,*.h set fileformat=unix

" Set the default file encoding to UTF-8:
set encoding=utf-8

" For full syntax highlighting:
let python_highlight_all=1
syntax on

" Keep indentation level from previous line:
autocmd FileType python set autoindent

" make backspaces more powerfull
set backspace=indent,eol,start


"Folding based on indentation:
autocmd FileType python set foldmethod=indent
"use space to open folds
nnoremap <space> za 
"----------Stop python PEP 8 stuff--------------

"js stuff"
autocmd FileType javascript setlocal shiftwidth=2 tabstop=2

如果对vimrc的意义感兴趣,建议前往Vim+IDE了解。
(4) 在将上面信息粘贴好后,请按Esc后输入:

:wq

保存文件。

(5) 再次进入vimrc:

$ sudo vim /.vimrc

此时可能会报错:


EOF.png

解决' py << EOF '错误的方法为安装依赖包:

$ sudo apt-get install vim-nox-py2

3.3 搭建IDE环境

(1) 我们的操作对象依然是vimrc,需要在其中加入我们需要的插件信息。请再次进入vimrc:

$ sudo vim /.vimrc

(2)请按Esc后输入:

:PluginInstall

如图:


plugin.png

回车,等待插件安装完成后,显示:


done.png

(3) 请按Esc后输入:
:q

退出当前操作。


t.png

(4) 再请按Esc后输入:

:q

退出vimrc。

3.4 测试

(1) 我们当前目录下创建一个测试文件t.py,并编辑。

$ touch ~/t.py
$ vim ~/t.py

(2) 进入文件后,下方会出现ycmd 服务关闭的消息(如下图),本异常是因代码自动补全插件YouCompleteMe尚未安装完毕,暂时不用管它,我们稍后处理。


ycmd.png

好像没什么变化,对吗?试着按F3,应该看到变化了吧,这就是目录显示列表。


cg.png

至此,我们就完成了vimrc的配置。

3.5 YouCompleteMe安装

(1) 接下来,我们将完成代码补全功能。在Terminal中输入:

$ cd ~
$ mkdir ycm_build
$ cd ycm_build
$ cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

(2) 如果你还没有安装cmake,就会出现提示。


cm.png

没有安装,就请在Terminal中输入:

$ sudo apt-get install cmake

(3) 安装完成,再次尝试:

$ cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

可能会报错:


cme.png

解决方法,安装依赖包:

$ sudo apt-get install python-dev

再次尝试:

$ cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

安装成功。


cmm.png

(4) 安装其他依赖包:

$ sudo apt install build-essential python3-dev

(5) 安装YCM:

$ cd ~/.vim/bundle/YouCompleteMe
$ sudo python3 install.py --clang-completer

安装完成。


ycmm.png

4 体验

至此,我们就可以开始高效的工作了。可能,继续要学习的就是各个插件的使用方法了。


ycmmm.png

欢迎大家交流!

5 参考

(1) Vim+IDE

(2) Vimrc

(3) YouCompleteMe

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容