Ubuntu 14.04 vim插件配置教程
(最终配置成适配C/C++语言编程的IDE)
注:本系统采用ubuntu-14.04.3-desktop-amd64.iso镜像生成的虚拟机,以下步骤中的路径位置可能会因为你的系统版本不同需要做相应的修改,请务必注意!
一、安装vim
apt-get install vim
二、安装v
im基本插件
sudo apt-get install vim vim-scripts vim-doc
三、创建配置文件 .vimrc,并编写文件
进入用户文件夹(/home/user/)之后,用gedit新建一个名叫.vimrc的文件:
1 cd ~
2 gedit .vimrc
将以下配置复制粘贴到 .vimrc 中
" Uncomment the next line to make Vim more Vi-compatible
" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
" options, so any other options should be set AFTER setting 'compatible'.
set nocompatible
" Vim5 and later versions support syntax highlighting. Uncommenting the
" following enables syntax highlighting by default.
if has("syntax")
syntax on " 语法高亮
endif
colorscheme ron " elflord ron peachpuff default 设置配色方案,vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下
" detect file type
filetype on
filetype plugin on
" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
set background=dark
" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
"have Vim load indentation rules and plugins according to the detected filetype
filetype plugin indent on
endif
" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though.
"set ignorecase " 搜索模式里忽略大小写
"set smartcase " 如果搜索模式包含大写字符,不使用 'ignorecase' 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用。
set autowrite " 自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。
set autoindent " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置
"set smartindent " 智能对齐方式
set tabstop=4 " 设置制表符(tab键)的宽度
set softtabstop=4 " 设置软制表符的宽度
set shiftwidth=4 " (自动) 缩进使用的4个空格
set cindent " 使用 C/C++ 语言的自动缩进方式
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s "设置C/C++语言的具体缩进方式
"set backspace=2 " 设置退格键可用
set showmatch " 设置匹配模式,显示匹配的括号
set linebreak " 整词换行
set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
"set hidden " Hide buffers when they are abandoned
set mouse=a " Enable mouse usage (all modes) "使用鼠标
set number " Enable line number "显示行号
"set previewwindow " 标识预览窗口
set history=50 " set command history to 50 "历史记录50条
"--状态行设置--
set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行
set ruler " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。
"--命令行设置--
set showcmd " 命令行显示输入的命令
set showmode " 命令行显示vim当前模式
"--find setting--
set incsearch " 输入字符串就显示匹配点
set hlsearch
四、
ctags插件安装与配置
ctags可以建立源码树的标签索引(标签就是一个标识符被定义的地方,如函数定义),使程序员在编程时能迅速定位函数、变量、宏定义等位置去查看原形。比如选中 printf 函数之后 ctrl+] 就会跳到printf在Linux内核库函数中的定义位置。
1)安装ctags:
sudo apt-get install ctags
2)建立索引:Linux内核库函数往往存放在/usr/include/x86_64-linux-gnu路径中(这一点看具体系统版本而定,本系统是 ubuntu-14.04.3 ,因此你的路径可能会不同,一定要注意!)
cd /usr/include/x86_64-linux-gnu (这里的路径以我为例)
sudo ctags -R (这一步是在x86_64-linux-gnu 中创建tags索引文件)
3)
向vim注册索引文件tags的路径
vi ~/.vimrc
用vi打开后在 .vimrc文件 的后面再追加下面的配置
切记! set tags+=/usr/include/x86_64-linux-gnu 后面的路径一定要按照自己的Linux内核库函数路径填写!!
"--ctags setting--
" 按下F5重新生成tag文件,并更新taglist
map :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . :TlistUpdate
imap :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . :TlistUpdate
set tags=tags
set tags+=./tags "add current directory's generated tags file
set tags+=/usr/include/x86_64-linux-gnu "刚刚生成tags的路径,在ctags -R 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件
4)简单举例
用vim在任意目录写一个Test.c文件,编写内容如下:
#include "stdio.h"
int main(void)
{
printf("Hello World!\n");
return 0;
}
写好后末行模式输入w保存好(不要退出vim),按Esc回到指令模式,把光标停留在printf上
然后按 Ctrl+W + ],vim会自动跳到Linux系统函数printf()处,这时我们能查看printf()的原形
查看完了,按Ctrl+o(回到上一个标签) 就回到原来的地方,如果能正常跳转,那就成功了。
五、
管理vim插件—vim-addons
1) 安装vim-addons:
sudo apt-get install vim vim-scripts vim-doc
2) 查看插件状态:
vim-addons status
3) 创建插件安装管理目录:
cd /home/user
mkdir .vim
cd .vim
mkdir plugin
mkdir doc
以上步骤保证
vim-addons能正常使用
六、
vim自动补全插件—
OmniCppComplete
1)安装OmniCppComplete
vim-addons install omnicppcomplete
2)配置OmniCppComplete
vi /home/user/.vimrc
在vim配置文件/home/user/.vimrc中加入如下的配置:
"-- omnicppcomplete setting --
" 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码
imap
" 按下F2根据头文件内关键字补全
imap
set completeopt=menu,menuone " 关掉智能补全时的预览窗口
let OmniCpp_MayCompleteDot = 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
"let OmniCpp_DefaultNamespaces=["std"]
let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=1
3)配置OmniCppComplete
首先,下载C++一份C++标准库的源代码
sudo apt-get install build-essential
然后,在/usr/include/c++下就可以找到标准库的头文件了
cd /usr/include/c++
sudo ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
vi ~/.vimrc
最后,在.vimrc中加入下面一句话:
set tags+=/usr/include/c++/tags
上一步完成后
cd ~
vim test.c
打开之前的那个test.c文件,
在printf("Hello World")下一行中,输入pri,然后按下Ctrl+X Ctrl+O,此时vim会弹出一个窗口,所有以pri开头的候选函数都会出现在这个窗口中。
常用快捷键:
Ctrl+P 向前切换成员
Ctrl+N 向后切换成员
Ctrl+E 表示退出下拉窗口, 并退回到原来录入的文字
Ctrl+Y 表示退出下拉窗口, 并接受当前选项
其他补全方式:
Ctrl+X Ctrl+L 整行补全
Ctrl+X Ctrl+N 根据当前文件里关键字补全
Ctrl+X Ctrl+K 根据字典补全
Ctrl+X Ctrl+T 根据同义词字典补全
Ctrl+X Ctrl+I 根据头文件内关键字补全
Ctrl+X Ctrl+] 根据标签补全
Ctrl+X Ctrl+F 补全文件名
Ctrl+X Ctrl+D 补全宏定义
Ctrl+X Ctrl+V 补全vim命令
Ctrl+X Ctrl+U 用户自定义补全方式
Ctrl+X Ctrl+S 拼写建议
七、函数原型提示
—
echofunc
1、首先你需要在你的火狐浏览器中输入链接 http://www.vim.org/scripts/download_script.php?src_id=17383
下载echofunc插件,
下载完成后,把echofunc.vim文件放到 /usr/.vim/plugin文件夹中。
2、假如 echofunc.vim文件下载后在/home/user中,那么移动文件的操作是:
(一定要对应你自己的路径)
mv /home/user/echofunc.vim
/home/user/
.vim/plugin
3、然后进入plugin目录
cd /home/user/.vim/plugin
ctags -R --fields=+lS
然后再编辑test.c,输入printf( 就会出现下面的提示了。
八、
标签浏览器Taglist
Taglist用于列出了当前文件中的所有标签(宏, 全局变量, 函数名等)
安装Taglist
vim-addons install taglist
配置Taglist
在vim配置文件/home/user/.vimrc
(隐藏了的,需要用cd和vim配合进入)
中加入如下的配置:
"-- Taglist setting --
let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行
let Tlist_Use_Right_Window=0 "让窗口显示在右边,0的话就是显示在左边
let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表
let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏
let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vim
"是否一直处理tags.1:处理;0:不处理
let Tlist_Process_File_Always=1 "实时更新tags
let Tlist_Inc_Winwidth=0
进入vim后用命令":Tlist"打开/关闭taglist窗口
九、
文件浏览器和缓冲区管理器WinManager
用WinManager来管理文件浏览器netrw和标签浏览器Taglist。netrw是标准的vim插件, 已经随vim一起安装进系统里了, 不需要我们自行下载安装。
1)安装WinManager
vim-addons install winmanager
2)
配置WinManager
在vim配置文件/home/user/.vimrc
(隐藏了的,需要用cd和vim配合进入)
中加入如下的配置:
"-- WinManager setting --
let g:winManagerWindowLayout='FileExplorer|TagList' " 设置我们要管理的插件
"let g:persistentBehaviour=0 " 如果所有编辑文件都关闭了,退出vim
nmap wm :WMToggle
进入vim后用命令":
WMToggle
"打开/关闭
WinManage
窗口,也可以用快捷键按“wm”打开/关闭
WinManage
窗口。
常用命令:
:WMToggle 打开/关闭WinManage,不过我们在配置文件.vimrc中做了快捷键映射,所以直接按wm就可以打开/关闭WinManage
文件浏览器命令(在文件浏览器窗口中使用)
或双击 如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件
如果光标下是目录, 则进入该目录; 如果光标下文件, 则在新窗口打开该文件
刷新列表
- 返回上一层目录
c 使浏览目录成为vim当前工作目录
d 创建目录
D 删除当前光标下的目录或文件
i 切换显示方式
R 文件或目录重命名
s 选择排序方式
r 反向排序列表
x 定制浏览方式, 使用你指定的程序打开该文件
winmanager帮助文档
:help winmanager
:help netrw netrw帮助文档
十、
代码折叠fold
在vim配置文件/home/user/.vimrc
(隐藏了的,需要用cd和vim配合进入)
中加入如下的配置:
"--fold setting--
set foldmethod=syntax " 用语法高亮来定义折叠
set foldlevel=100 " 启动vim时不要自动折叠代码
set foldcolumn=5 " 设置折叠栏宽度
常用命令
za 打开/关闭在光标下的折叠
zA 循环地打开/关闭光标下的折叠
zo 打开 (open) 在光标下的折叠
zO 循环打开 (Open) 光标下的折叠
zc 关闭 (close) 在光标下的折叠
zC 循环关闭 (Close) 在光标下的所有折叠
zM 关闭所有折叠
zR 打开所有的折叠
帮助文档
:help usr_28.txt
:help fold.txt
十一、
quickfix命令集
在vim配置文件/home/user/.vimrc
(隐藏了的,需要用cd和vim配合进入)
中加入如下的配置:
"-- QuickFix setting --
" 按下F6,执行make clean
map :make clean
" 按下F7,执行make编译程序,并打开quickfix窗口,显示编译信息
map :make :copen
" 按下F8,光标移到上一个错误所在的行
map :cp
" 按下F9,光标移到下一个错误所在的行
map :cn
" 以上的映射是使上面的快捷键在插入模式下也能用
imap :make clean
imap :make :copen
imap :cp
imap :cn
常用命令:
:make {arguments}
如果编译时出现错误,按 ,回到vim界面,看不到出错信息了!这时,可以运行以下命令
:cw[indow]
打开quickfix窗口来查看出错信息,它会自动跳到第一处出错的地方。然后,你可以双击出错某一条出错信息,vim就会自动跳转到相应的出错位置
:cn[ext] 光标移到下一个错误所在的行
:cp[revious] 光标移到上一个错误所在的行
:cfirst 到第一处错误
:clast 到最后一处错误
:cc 空间不够时,Vim 会缩短出错信息。如果你想查看详细信息,可以使用此命令
:cl[ist] 列出所有出错信息的概览(只有那些含有文件名或行数的错误信息会被显示,需要查看那些并不含文件名或行数的信息可用“:cl[ist]!”命令)
十二、
Cscope
Cscope是一个类似于ctags的工具,不过其功能比ctags强大很多。
安装Cscope
sudo apt-get install cscope
在vim配置文件/home/user/.vimrc
(隐藏了的,需要用cd和vim配合进入)
中加入如下的配置:
"-- Cscope setting --
if has("cscope")
set csprg=/usr/bin/cscope " 指定用来执行cscope的命令
set csto=0 " 设置cstag命令查找次序:0先找cscope数据库再找标签文件;1先找标签文件再找cscope数据库
set cst " 同时搜索cscope数据库和标签文件
set cscopequickfix=s-,c-,d-,i-,t-,e- " 使用QuickFix窗口来显示cscope查找结果
set nocsverb
if filereadable("cscope.out") " 若当前目录下存在cscope数据库,添加该数据库到vim
cs add cscope.out
elseif $CSCOPE_DB != "" " 否则只要环境变量CSCOPE_DB不为空,则添加其指定的数据库到vim
cs add $CSCOPE_DB
endif
set csverb
endif
map :cs add ./cscope.out . :cs reset
imap :cs add ./cscope.out . :cs reset
" 将:cs find c等Cscope查找命令映射为c等快捷键(按法是先按Ctrl+Shift+-, 然后很快再按下c)
nmap s :cs find s =expand("") :copen
nmap g :cs find g =expand("")
nmap d :cs find d =expand("") :copen
nmap c :cs find c =expand("") :copen
nmap t :cs find t =expand("") :copen
nmap e :cs find e =expand("") :copen
nmap f :cs find f =expand("")
nmap i :cs find i =expand("") :copen
主要用法:
cscope的主要功能是通过其"find"子命令来实现的
"cscope find"的用法:
cs find c|d|e|f|g|i|s|t name
0 或 s 查找这个 C 符号(可以跳过注释)
1 或 g 查找这个定义
2 或 d 查找这个函数调用的函数
3 或 c 查找调用过这个函数的函数
4 或 t 查找这个字符串
6 或 e 查找这个 egrep 模式
7 或 f 查找这个文件
8 或 i 查找包含这个文件的文件
用法:
<1>、为源码建立一个cscope数据库
lingd@ubuntu:~/arm/linux-2.6.28.7$ cscope -Rbq
lingd@ubuntu:~/arm/linux-2.6.28.7$ ls cscope.*
cscope.in.out cscope.out cscope.po.out
<2>、用vim打开某个源码文件,末行模式下,输入“:cs add cscope.out"(该命令已被我们映射为快捷键F4),添加cscope数据库到vim。因为我们已将vim配置为启动时,自动添加当前目录下的cscope数据库,所以你再添加该cscope数据库时,vim会提示“重复cscope数据库 未被加入“
<3>、完成前两步后,现在就可以用“cs find c”等Cscope查找命令查找关键字了。我们已在.vimrc中将“cs find c”等Cscope查找命令映射为c等快捷键(按法是先按Ctrl+Shift+-, 然后很快按下c)
帮助文档
:help if_cscop
注意:帮助文档if_cscop中,快捷键映射nmap i :cs find i ^=expand("")$是有误的!
比如光标“header.h”上按下i,也就是查找包含“header.h“的文件。但是按照这个映射规则,则是将i映射为cs find i ^header.h$,也就是查找包含“^header.h$“的文件,这显然不是我们想要的结果。该映射规则应该改成nmap i :cs find i =expand("")
十三、一键编译C/C++文件
在vim配置文件/home/user/.vimrc
(隐藏了的,需要用cd和vim配合进入)
中加入如下的配置:
map :w:call CompileRun()
map :w:call Debug()
func CompileRun()
exec "w"
if &filetype == 'c'
exec "!gcc % -g -o %<"
exec "!.\/%<"
elseif &filetype =='cpp'
exec "!g++ % -g -o %<"
exec "!.\/%<"
elseif &filetype == 'python'
exec "!python %"
endif
endfunc
func Debug()
exec "w"
if &filetype == 'c'
exec "!rm %<"
exec "!gcc % -g -o %<"
exec "!gdb %<"
elseif &filetype == 'cpp'
exec "!rm %<"
exec "!g++ % -g -o %<"
exec "!gdb %<"
exec "!rm %<.class"
elseif &filetype == 'java'
exec "!javac %"
exec "!jdb %<"
elseif &filetype == 'python'
exec "!pdb %"
endif
endfunc
然后在test.c中按F8编译运行程序,双击F8为调试程序,
运行结果就是 hello world。
十四、配置括号自动添加
在vim配置文件/home/user/.vimrc
(隐藏了的,需要用cd和vim配合进入)
中加入如下的配置:
:inoremap ( ()i
:inoremap ) =ClosePair(‘)’)
:inoremap { {}i
:inoremap } =ClosePair(‘}’)
:inoremap [ []i
:inoremap ] =ClosePair(‘]’)
:inoremap < <>i
:inoremap > =ClosePair(‘>’)
function ClosePair(char)
if getline(‘.’)[col('.') - 1] == a:char
return “\”
else
return a:char
endif
endf
最后,vim常用的快捷键
vim常用快捷键
% 跳转到配对的括号去
[[ 跳转到当前或者上一代码块(函数定义、类定义等)的开头去(但要求代码块中'{'必须单独占一行)
][ 跳转到当前代码块(函数定义、类定义等)的结尾去(但要求代码块中'{'必须单独占一行)
]] 跳转到下一代码块(函数定义、类定义等)的开头去(但要求代码块中'{'必须单独占一行)
[/ 跳到注释开头(只对/* */注释有效)
]/ 跳到注释结尾(只对/* */注释有效)
gD 跳转到当前文件内标识符首次出现的位置,可用于跳转到全部变量的定义处;查找局部变量时,要是多个函数中定义了该局部变量,使用gD进行查找,找到的变量定义可能不是你需要的
gd 跳转到当前函数内标识符首次出现的位置,可用于跳转到局部变量的定义处
'' 跳转到光标上次停靠的地方, 是两个', 而不是一个"
mx 设置书签,x只能是a-z的26个字母
`x 跳转到书签处("`"是1左边的键)
> 增加缩进,"x>"表示增加以下x行的缩进
< 减少缩进,"x<"表示减少以下x行的缩进
呼~结束
By robotzzg(2hi9uo)