Ubuntu16.04Vim+Vundle+Python编辑器(傻瓜操作版)

    一般ubuntu都会默认安装vim-tiny版本


1 vim插件

    在用户主目录下的 ~/.vimrc 文件中完成的,如果没有的话,需要自己新建一下:

cd ~
touch .vimrc

    touch是在linux中比较常用的创建文件命令, 关于touch和mkdir的区别请自行百度

    vim插件中最主要的就是vundle了,vundle用来管理vim的其它插件

    项目地址https://github.com/VundleVim/Vundle.vim。

    首先下载源码:

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
    如果~/.vim/bundle目录不存在,则新建目录:
cd ~
mkdir .vim
cd .vim
mkdir bundle

    然后将下列配置放在.vimrc文件的开头:

set nocompatible              " be iMproved, required
filetype off                  " required
 
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
 
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
 
" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

如果想下载某个插件,比如自动缩进indentpython.vim插件,需要将

Plugin 'vim-scripts/indentpython.vim'

置于call vundle#begin()和call vundle#end()之间,保存配置后在vim中执行输入linux命令vim,回车,然后输入:

:PluginInstall

即可以自动下载indentpython.vim插件了。

bundle可以管理下载几种不同的插件,方式如下:

github上的插件
Plugin 'tpope/vim-fugitive'
来自于http://vim-scripts.org/vim/scripts.html的插件
Plugin 'L9'
非github上的git插件
Plugin 'git://git.wincent.com/command-t.git'
本地插件
Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
" Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
有旧插件的情况下,下载新的插件并重命名以避免冲突
Plugin 'ascenator/L9', {'name': 'newL9'}

下载方式除了在vim中运行:PluginInstall外,还可以在命令行中运行:

vim +PluginInstall +qall

这部分也可参考以下链接:

https://www.cnblogs.com/linxiyue/p/7834817.html

2 简单设置.vimrc

 简单的配置.vimrc

set nocompatible "关闭与vi的兼容模式
set number "显示行号
set nowrap    "不自动折行
set showmatch    "显示匹配的括号
set scrolloff=3        "距离顶部和底部3行"
set encoding=utf-8  "编码
set fenc=utf-8      "编码
set mouse=a        "启用鼠标
set hlsearch        "搜索高亮
syntax on    "语法高亮

为py文件添加下支持pep8风格的配置:

au BufNewFile,BufRead *.py
\ set tabstop=4   "tab宽度
\ set softtabstop=4 
\ set shiftwidth=4  
\ set textwidth=79  "行最大宽度
\ set expandtab       "tab替换为空格键
\ set autoindent      "自动缩进
\ set fileformat=unix   "保存文件格式

更多建议参考以下文章:

https://blog.csdn.net/u013475704/article/details/52295157

3 YouCompleteMe的ubuntu准备工具

非常好用的自动补全插件,就是比较重。

官网地址:http://valloric.github.io/YouCompleteMe/

github地址:https://github.com/Valloric/YouCompleteMe

YouCompleteMe安装后还需要手动编译,然后再在.vimrc中配置。

在ubuntu中使用,首先准备一些工具:

sudo apt-get install build-essential cmake

接下来这句话,ubuntu有可能会包包依赖的错:

sudo apt-get install python-dev python3-dev

Ubuntu16.04Vim+Vundle+Python编辑器(傻瓜操作版)_第1张图片

下列软件包有未满足的依赖关系:
 python-dev : 依赖: python (= 2.7.11-1) 但是 2.7.12-1~16.04 正要被安装
              依赖: libpython-dev (= 2.7.11-1) 但是它将不会被安装
              依赖: python2.7-dev (>= 2.7.11-1~) 但是它将不会被安装
 python3-dev : 依赖: libpython3-dev (= 3.5.1-3) 但是它将不会被安装
               依赖: python3.5-dev (>= 3.5.1-2~) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

然后发现不管怎么执行sudo apt命令都无法安装其中任意一个,因为包与包之间都有相互的依赖关系

博文推荐使用aptitude工具:

sudo apt-get install aptitude
sudo aptitude install python-dev
Ubuntu16.04Vim+Vundle+Python编辑器(傻瓜操作版)_第2张图片

qly@qlyComputer:~$ sudo aptitude install python-dev
下列“新”软件包将被安装。         
  libexpat1-dev{ab} libpython-dev{a} libpython2.7-dev{ab} python-dev{b} python2.7-dev{ab}
0 个软件包被升级,新安装 5 个, 0 个将被删除, 同时 1 个将不升级。
需要获取 28.2 MB 的存档。 解包后将要使用 42.1 MB。
下列软件包存在未满足的依赖关系:
 python2.7-dev : 依赖: python2.7 (= 2.7.11-7ubuntu1) 但是 2.7.12-1ubuntu0~16.04.3 已安装。
                 依赖: libpython2.7 (= 2.7.11-7ubuntu1) 但是 2.7.12-1ubuntu0~16.04.3 已安装。
 libexpat1-dev : 依赖: libexpat1 (= 2.1.0-7) 但是 2.1.0-7ubuntu0.16.04.3 已安装。
 libpython2.7-dev : 依赖: libpython2.7-stdlib (= 2.7.11-7ubuntu1) 但是 2.7.12-1ubuntu0~16.04.3 已安装。
                    依赖: libpython2.7 (= 2.7.11-7ubuntu1) 但是 2.7.12-1ubuntu0~16.04.3 已安装。
 python-dev : 依赖: python (= 2.7.11-1) 但是 2.7.12-1~16.04 已安装。
下列动作将解决这些依赖关系:

     保持 下列软件包于其当前版本:
1)     libexpat1-dev [未安装的]   
2)     libpython-dev [未安装的]   
3)     libpython2.7-dev [未安装的]
4)     python-dev [未安装的]      
5)     python2.7-dev [未安装的]   


注意这时一定要选n!!不是y!!
是否接受该解决方案?[Y/n/q/?] n
下列动作将解决这些依赖关系:

      删除 下列软件包:                                                                 
1)      libexpat1:i386                                                                  
2)      libfontconfig1:i386                                                             
3)      libgd3:i386                                                                     
4)      libgl1-mesa-dri:i386                                                            
5)      libgl1-mesa-glx:i386                                                            
6)      libglu1-mesa:i386                                                               
7)      libgphoto2-6:i386                                                               
8)      libsane:i386                                                                    
9)      wine-devel                                                                      
10)     wine-devel-i386:i386                                                            
11)     winehq-devel                                                                    

      降级 下列软件包:                                                                 
12)     libexpat1 [2.1.0-7ubuntu0.16.04.3 (now) -> 2.1.0-7 (xenial)]                    
13)     libpython-stdlib [2.7.12-1~16.04 (now) -> 2.7.11-1 (xenial)]                    
14)     libpython2.7 [2.7.12-1ubuntu0~16.04.3 (now) -> 2.7.11-7ubuntu1 (xenial)]        
15)     libpython2.7-minimal [2.7.12-1ubuntu0~16.04.3 (now) -> 2.7.11-7ubuntu1 (xenial)]
16)     libpython2.7-stdlib [2.7.12-1ubuntu0~16.04.3 (now) -> 2.7.11-7ubuntu1 (xenial)]
17)     python [2.7.12-1~16.04 (now) -> 2.7.11-1 (xenial)]                              
18)     python-minimal [2.7.12-1~16.04 (now) -> 2.7.11-1 (xenial)]                      
19)     python2.7 [2.7.12-1ubuntu0~16.04.3 (now) -> 2.7.11-7ubuntu1 (xenial)]           
20)     python2.7-minimal [2.7.12-1ubuntu0~16.04.3 (now) -> 2.7.11-7ubuntu1 (xenial)]   

      保留下列未解决的依赖关系:                                                        
21)     wine-devel-i386:i386 推荐 libfontconfig1:i386 (>= 2.11.94)                      


是否接受该解决方案?[Y/n/q/?] y
下列软件包将被“降级”:
  libexpat1 libpython-stdlib libpython2.7 libpython2.7-minimal libpython2.7-stdlib python python-minimal python2.7 python2.7-minimal
下列“新”软件包将被安装。
  libexpat1-dev{a} libpython-dev{a} libpython2.7-dev{a} python-dev python2.7-dev{a}
下列软件包将被“删除”:
  gstreamer1.0-plugins-base:i386{u} libasn1-8-heimdal:i386{u} libasound2:i386{u} libasound2-plugins:i386{u} libasyncns0:i386{u}
  libavahi-client3:i386{u} libavahi-common-data:i386{u} libavahi-common3:i386{u} libbsd0:i386{u} libcapi20-3{u} libcapi20-3:i386{u}
 此处省略n多行-------------
0 个软件包被升级,新安装 5 个, 9 个被降级, 140 个将被删除, 同时 1 个将不升级。
需要获取 33.2 MB 的存档。 解包后将释放 653 MB。
您要继续吗?[Y/n/?] y
读取: 1 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 python-minimal amd64 2.7.11-1 [28.2 kB]
读取: 2 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 python amd64 2.7.11-1 [137 kB]

此处省略n多行-------------


总算解决了python-dev的包依赖问题,接下来继续

sudo aptitude install python3-dev

qly@qlyComputer:~$ sudo aptitude install python3-dev
下列“新”软件包将被安装。         
  libpython3-dev{a} libpython3.5-dev{ab} python3-dev python3.5-dev{ab}
0 个软件包被升级,新安装 4 个, 0 个将被删除, 同时 1 个将不升级。
需要获取 37.7 MB 的存档。 解包后将要使用 53.9 MB。
下列软件包存在未满足的依赖关系:
 python3.5-dev : 依赖: python3.5 (= 3.5.1-10) 但是 3.5.2-2ubuntu0~16.04.4 已安装。
                 依赖: libpython3.5 (= 3.5.1-10) 但是 3.5.2-2ubuntu0~16.04.4 已安装。
 libpython3.5-dev : 依赖: libpython3.5-stdlib (= 3.5.1-10) 但是 3.5.2-2ubuntu0~16.04.4 已安装。
                    依赖: libpython3.5 (= 3.5.1-10) 但是 3.5.2-2ubuntu0~16.04.4 已安装。
下列动作将解决这些依赖关系:

     保持 下列软件包于其当前版本:
1)     libpython3-dev [未安装的]  
2)     libpython3.5-dev [未安装的]
3)     python3-dev [未安装的]     
4)     python3.5-dev [未安装的]   



是否接受该解决方案?[Y/n/q/?] n
下列动作将解决这些依赖关系:

     降级 下列软件包:                                                         
1)     libpython3.5 [3.5.2-2ubuntu0~16.04.4 (now) -> 3.5.1-10 (xenial)]        
2)     libpython3.5-minimal [3.5.2-2ubuntu0~16.04.4 (now) -> 3.5.1-10 (xenial)]
3)     libpython3.5-stdlib [3.5.2-2ubuntu0~16.04.4 (now) -> 3.5.1-10 (xenial)]
4)     python3.5 [3.5.2-2ubuntu0~16.04.4 (now) -> 3.5.1-10 (xenial)]           
5)     python3.5-minimal [3.5.2-2ubuntu0~16.04.4 (now) -> 3.5.1-10 (xenial)]   



是否接受该解决方案?[Y/n/q/?] y
下列软件包将被“降级”:
  libpython3.5 libpython3.5-minimal libpython3.5-stdlib python3.5
  python3.5-minimal
下列“新”软件包将被安装。
  libpython3-dev{a} libpython3.5-dev{a} python3-dev python3.5-dev{a}
0 个软件包被升级,新安装 4 个, 5 个被降级, 0 个将被删除, 同时 1 个将不升级。
需要获取 43.4 MB 的存档。 解包后将要使用 53.7 MB。
您要继续吗?[Y/n/?] y
读取: 1 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libpython3.5 amd64 3.5.1-10 [1,360 kB]
2% [1 libpython3.5 1,044 kB/1,360 kB 77%]              4,068 B/s 2小时 53分 3                                                                             2% [1 libpython3.5 1,05                                                           2% [1 libpython3.5 1,0612% [1 libpython3.5 1,0622% [2% [1 libpython3.5 1,0622% [1 li2% [2% [1 libpython3.5 1,062 kB/1,362% [1 libpython3.5 1,062 kB/1,360 kB 78%]                                         3% [1 libpython3.5 1,156 kB/1,360 kB 85%]                                                                                 3,853 B/s 3小时 2分 5                                                                                   读取: 2 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 python3.5 amd64 3.5.1-10 [159 kB]
读取: 3 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libpython3.5-stdlib amd64 3.5.1-10 [2,117 kB]
读取: 4 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 python3.5-minimal amd64 3.5.1-10 [1,588 kB]
 此处省略n多行-------------

关于包依赖报错可参考这个链接:

https://blog.csdn.net/u013182960/article/details/53431460

4 YouCompleteMe的安装与配置

也有blog推荐使用Vundle的.vimrc配置文件来安装YCM

Plugin 'Valloric/YouCompleteMe'

我是手动下载安装的

#在主文件目录执行
git clone https://github.com/Valloric/YouCompleteMe.git
#手动下载完后检查仓库的完整性,切换到 YouCompleteMe 目录下,输入如下命令:
#进入到YCM文件目录
cd .vim/bundle/YoucomPleteMe 
#执行命令
git submodule update --init --recursive

过程中如果网络不给力,推荐使用du命令观察文件大小

du -lhs .vim/bundle/YouComPleteMe

待接收对象克隆模块后,编译

参数 --clang-completer是为了加上C系列语言的自动补全,也可以不加:

如果不需要c-family的补全,可以去掉--clang-completer。如果需要c#的补全,请加上--omnisharp-completer

#在YCM目录执行
./install.py --clang-completer

Ubuntu16.04Vim+Vundle+Python编辑器(傻瓜操作版)_第3张图片

把下列代码拷贝到.vimrc配置文件,

111 set runtimepath+=~/.vim/bundle/YouCompleteMe
112 let g:ycm_collect_identifiers_from_tags_files = 1           " 开启 YCM基于标签引擎  
113 let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释与字符串中的内容也用于补全  
114 let g:syntastic_ignore_files=[".*\.py$"]
115 let g:ycm_seed_identifiers_with_syntax = 1                  " 语法关键字补全  
116 let g:ycm_complete_in_comments = 1
117 let g:ycm_confirm_extra_conf = 0                 "如果为1的话,会总是提示是否加载.ycm_extra_conf.py文件  
118 let g:ycm_key_list_select_completion = ['', '']  " 映射按键,没有这个会拦截掉tab, 导致其他插件的tab不能用.  
119 let g:ycm_key_list_previous_completion = ['', '']
120 let g:ycm_complete_in_comments = 1                          " 在注释输入中也能补全  
121 let g:ycm_complete_in_strings = 1                           " 在字符串输入中也能补全  
122 let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释和字符串中的文字也会被收入补全  
123 let g:ycm_global_ycm_extra_conf ='~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py'  "制定YCM目录
124 let g:ycm_show_diagnostics_ui = 0                           " 禁用语法检查  
125 inoremap  pumvisible() ? "\" : "\" |                        "回车即选中当前项
126 let g:ycm_min_num_of_chars_for_completion = 2  "开始补全的字符数"
127 
128 let g:ycm_python_binary_path = 'python'  "jedi模块所在python解释器路径"
129 let g:ycm_seed_identifiers_with_syntax = 1  "开启使用语言的一些关键字查询"
130 let g:ycm_autoclose_preview_window_after_completion=1 "补全后自动关闭预览窗口"" 回车即选中当前项
131 nnoremap  :YcmCompleter GoToDefinitionElseDeclaration|     " 跳转到定义处
132 let g:ycm_min_num_of_chars_for_completion=2                 "从第2个键入字符就开始罗列匹配项 
133 let g:ycm_global_ycm_extra_conf ='~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py'

关键是配置文件.ycm_extra_conf.py,包含了补全的系统头文件和源文件出处

安装完毕后,修改.ycm_extra_conf.py文件

从example复制文件到ycm目录

要用cd命令检查是否有cpp目录,一般都是有的

cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/.vim/bundle/YouCompleteMe
#vim启动时,先寻找YCM目录的,然后再往上继续查找配置文件
cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/.vim/bundle/YouCompleteMe

注意这时要先修改配置文件,再复制到主目录

#若对linux命令不熟悉,可使用gedit编辑文件
gedit ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py  

若.ycm_extra_conf.py文件没有以下代码,补上:

'-x',  
'c++',  
'-isystem',  
'../BoostParts',  
'-isystem',  
'/usr/include',  
'-isystem',  
'/usr/lib',  
'-isystem',  
'/usr/local/include',  
'-isystem',  
'/usr/include/c++/5',  

修改后,复制到主目录

cp ~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py ~/

5 NERDTree树型结构


下载nerdtree压缩包, http://www.vim.org/scripts/download_script.php?src_id=17123

 在.vim下面创建doc和plugin文件夹

mkdir doc plugin

在存放压缩包的文件目录下解压缩

unzip nerdtree.zip

复制文件到doc和plugin

#在解压缩的文件目录里面
cp /doc/NERD_tree.txt ~/.vim/doc
cp /plugin/NER_tree.vim ~/.vim/plugin

初次使用

输入命令:vim,然后在vim中输入命令 :NERDTree 再按回车就可以看到安装成功

注意 :NERTree实在一般模式中的command最底部输入的命令

Ubuntu16.04Vim+Vundle+Python编辑器(傻瓜操作版)_第4张图片

常用快捷键:

ctrl+w:切换编辑区域和文件结构区(即左侧树形结构) 

q:在文件结构区直接按q可以推出NerdTree

简单辅助配置

#添加开关树形目录的快捷键
#Ctrl+n开启目录
map  :NERDTreeToggle
#忽略pyc文件
let NERDTreeIgnore=['\~$','\.pyc$','\.swp$']
#为nerdtree添加git支持:
Plugin 'Xuyuanp/nerdtree-git-plugin'
#tab键
Plugin  'jistr/vim-nerdtree-tabs'

6 语法检查/配色插件

在 .vimrc文件的begin和end之间增加将要安装的插件

call vundle#begin()
 
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
 
" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required
Plugin 'vim-scripts/indentpython.vim'
Plugin 'vim-syntastic/syntastic'
Plugin 'nvie/vim-flake8'

然后在vim中执行命令,直至左下角出现done就结束

:PluginInstall

Ubuntu16.04Vim+Vundle+Python编辑器(傻瓜操作版)_第5张图片


配色的.vimrc文件配置:

solarized有dark和light两种配色

syntax enable
set background=light or dark
colorscheme solarized
#根据gui模式和终端模式进行切换
if has('gui_running')
    set background=light
else
    set background=dark
endif

另外一种配色Zenburn方案(我已安装了solarized就不安装这个了):

Plugin 'jnurmine/Zenburn'
if has('gui_running')
  set background=dark
  colorscheme solarized
else
  colorscheme Zenburn
endif
#vim-powerline
#美化状态栏,可以显示当前的虚拟环境、Git分支、正在编辑的文件等信息
Plugin 'Lokaltog/vim-powerline'
#indentline
Plugin 'Yggdroot/indentLine'
#python是靠代码缩进来判断代码块的,缩进指示线还是很方便的。
#自动格式化工具
Plugin  'tell-k/vim-autopep8'
#自动补全括号和引号
Plugin  'jiangmiao/auto-pairs'
#搜索插件
Plugin 'kien/ctrlp.vim'
#git集成插件
Plugin 'tpope/vim-fugitive

你可能感兴趣的:(python)