前言
折腾了大半天,终于搞得像个样子了,自己的环境是 ubuntu 16.04,主要有以下插件:
VundleVim(https://github.com/VundleVim/Vundle.vim) 管理插件
YouCompleteMe(https://github.com/Valloric/YouCompleteMe/) 代码自动补全
vim-airline(https://github.com/vim-airline/vim-airline) 增强状态栏和标签栏
TagList(http://www.vim.org/scripts/script.php?script_id=273) 查看函数和变量的定义
NERDTree(http://www.vim.org/scripts/script.php?script_id=1658) 文件目录树
identline(http://www.vim.org/scripts/script.php?script_id=4354) 显示缩进的对齐线
delimitMate(http://www.vim.org/scripts/script.php?script_id=2754) 自动补全括号和引号
Cscope(http://cscope.sourceforge.net/) 代码阅读
VundleVim
用这个插件来管理插件十分方便
安装
首先 clone 该项目到 ~/.vim/bundle,没有该文件夹的话可以新建
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
配置
修改 vim 配置文件,比如我的是 ~/.vimrc
首先需要关闭兼容模式和文件类型检测
set nocompatible
filetype off
然后设置运行时路径和插件
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" 这里根据自己需要的插件来设置,以下是我的配置 "
" github 仓库中的插件 "
Plugin 'VundleVim/Vundle.vim'
Plugin 'Valloric/YouCompleteMe'
Plugin 'vim-airline/vim-airline'
" vim-scripts 中的插件 "
Plugin 'taglist.vim'
Plugin 'The-NERD-tree'
Plugin 'indentLine.vim'
Plugin 'delimitMate.vim'
call vundle#end()
filetype plugin indent on
还支持两种插件类型,如下
" 非 github 仓库的插件 "
Plugin 'git://git.wincent.com/command-t.git'
" 本地仓库的插件 "
Plugin 'file:///home/gmarik/path/to/plugin'
使用
命令 | 说明 |
---|---|
PluginList | 列出安装的插件 |
PluginInstall | 根据配置文件安装插件 |
PluginUpdate | 更新插件 |
PluginSearch [name] | 查找名为 [name] 的插件 |
PluginClean | 清除无用的插件 |
YouCompleteMe
我的这个文件夹装完总共 400M,功能强大,体积也大
安装
安装前需要满足这些条件
Make sure you have Vim 7.3.598 with python2 or python3 support. Ubuntu 14.04 and later have a Vim that's recent enough.
这里使用 Vundle 来安装,在配置文件中加入下面这一句
Plugin 'Valloric/YouCompleteMe'
保存后执行 PluginInstall 等待下载完成,之后插件的安装都是这个步骤
由于这个插件有点大,国内不科学上网的话可能要需要比较久的时间才能下载完成
下载完成后,还需要安装一些东西
sudo apt-get install build-essential cmake
sudo apt-get install python-dev python3-dev
接下来开始编译,这里分为需要和不需要支持 C/C++ 的情况
cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer
上面是支持 C/C++ 的情况,会自动下载 clang,如果不需要支持 C/C++,则去掉 --clang-completer
对于 C#,GO,JavaScript 等语言的支持可以到 github 上查看安装方法
配置
如果需要支持 C/C++,在配置文件内加入下面这行代码,这里可以自己更改配置文件,具体方法和更多配置可以到 github 上查看
let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
vim-airline
这插件颜值挺高的,还支持更换主题
安装
Plugin 'vim-airline/vim-airline'
安装方法与之前相同,部分系统为了显示完全可能还需要安装字体补丁
配置
这里只简单地开启了标签栏
let g:airline#extensions#tabline#enabled = 1
TagList
这个东西感觉可以用 cscope 代替,不过旁边放个函数变量的窗口感觉更高大上一点
安装
首先需要安装 ctags,对于 ubuntu 来说比较简单,部分系统可能需要编译安装
sudo apt-get install ctags
然后按照之前的方法安装插件
Plugin 'taglist.vim'
配置
我简单地配置了一下,按 F3 开启,放在右边,仅显示一个文件的 tag,当只有一个窗口时自动关闭
map <F3> :TlistToggle<CR>
let Tlist_Use_Right_Window=1
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
let Tlist_WinWidt=25
需要自动开启加入 let Tlist_Auto_Open=1 即可
使用
快捷键 | 说明 |
---|---|
< CR > | 跳到 tag 定义的位置 |
< Space > | 显示 tag 定义 |
u | 更新 tag |
j | 向下移动 |
k | 向上移动 |
x | 放大缩小窗口 |
q | 关闭窗口 |
NERDTree
目录树,用起来特别方便
安装
Plugin 'The-NERD-tree'
安装方法与之前相同
配置
单纯设置了快捷键
map <F2> :NERDTreeToggle<CR>
let NERDTreeWinSize=25
需要自动启动可以加入下面的代码
autocmd vimenter * NERDTree
使用
快捷键 | 说明 |
---|---|
o | 打开关闭文件或目录 |
t | 在新标签中打开并转到文件 |
T | 在新标签中打开文件 |
! | 执行文件(文件名后面有 * 代表可执行) |
j | 向下移动 |
k | 向上移动 |
m | 显示系统菜单 |
p | 转到父目录 |
P | 转到根目录 |
q | 关闭窗口 |
identline & delimitMate
这两个插件可以不用配置,直接安装便可使用
安装
Plugin 'indentLine.vim'
Plugin 'delimitMate.vim'
安装方法与之前相同
Cscope
这个插件在阅读代码时十分有效,可以方便找到定义和跳转
安装
首先如果系统没有安装 csope,需要先安装,在 ubuntu 上依旧很方便
sudo apt-get install cscope
然后在 vim 内通过 version 查看是否支持 cscope,如果结果含有 +cscope 则代表支持,否则需要加入 --enable-cscope 选项并重新编译 vim
使用
首先需要创建目标工程的符号表数据库
cd ~/linux-0.11
cscope –Rbq
-R 递归生成子目录内代码的索引
-b 建完数据库后不进入查询界面
-q 生成倒排索引,加快搜索速度
执行后会生成三个文件 cscope.out cscope.in.out cscope.po.out
然后打开 vim,执行 :cs add cscope.out 便可以开始使用搜索功能
用法 :cs f c|d|e|f|g|i|s|t name
选项 | 说明 |
---|---|
s | 搜索指定符号 |
g | 跳转到指定符号的定义 |
d | 搜索指定函数调用的函数 |
c | 搜索调用指定函数的函数 |
t | 搜索指定字符串 |
e | 使用指定正则表达式搜索 |
f | 搜索指定文件 |
i | 搜索包含指定文件的文件 |
如果需要在打开 vim 时自动连接数据库,可以在配置文件加入下面的代码
if fileradable("cscope.out")
cs add csope.out
endif
意思是寻找当前目录的 cscope.out,如果有则连接,所以需要在指定目录打开 vim
cd ~/linux-0.11; vim