VIM 打造 c/c++ IDE
1. vim 的安装
$sudo apt-get install vim vim-scripts vim-doc <br>
其中vim-scripts包含了vim的一些基本插件,包括语法高亮,缩进等等。
vim的中文文档tar包下载地址: http://sourceforge.net/projects/vimcdoc/files/vimcdoc/
解压后其中有个doc文件夹, 将其中的内容全部复制到~/.vim/doc, 或者vim安装目录下的doc目录中, 此时vim中的help信息已经是中文的了.
网页版中文帮助文档网址http://vimcdoc.sourceforge.net/doc/help.html
首页就时vim帮助文档的目录,阅读起来更方便有效、更有针对性!
2. vim的配置文件
vim系统的配置文件在 /usr/share/vim, /etc/vim 两个文件夹下,但是,可以修改 ~/.vimrc 文件和 ~/.vim 目录来对用户单独配置vim。
3. vim的基本配置
"---------------------------------- pathogen 设置-------------------------
|
4. 代码折叠
- 折叠方式foldmethod
vim提供以下6种方法来选定折叠方式:
manual 手工定义折叠
indent 更多的缩进表示更高级别的折叠
expr 用表达式来定义折叠
syntax 用语法高亮来定义折叠
diff 对没有更改的文本进行折叠
marker 对文中的标志折叠 - 折叠级别foldlevel
‘foldlevel’ 是个数值选项:数字越大则打开的折叠更多。
当 ‘foldlevel’ 为 0 时,所有的折叠关闭。
当 ‘foldlevel’ 为正数时,一些折叠关闭。
当 ‘foldlevel’ 很大时,所有的折叠打开。 -
折叠栏foldcolumn
‘foldcolumn’ 是个数字,它设定了在窗口的边上表示折叠的栏的宽度。当为0时,没有折叠栏。最大是12。
一个打开的折叠由一栏来表示,顶端是 ‘-‘,其下方是 ‘|’。这栏在折叠结束的地方结束。当折叠嵌套时,嵌套的折叠出现在被包含的折叠右方一个字符位置。
一个关闭的折叠由 ‘+’ 表示。
当折叠栏太窄而不能显示所有叠时,显示一数字来表示嵌套的级别。
在折叠栏点击鼠标,可以打开和关闭折叠:
(1)点击 ‘+’ 打开在这行的关闭折叠
(2) 在任何其他非空字符上点击,关闭这行上的打开折叠
在vim配置文件/home/user/.vimrc中加入如下的配置:"--fold setting--
set foldmethod=syntax " 用语法高亮来定义折叠
set foldlevel=100 " 启动vim时不要自动折叠代码
set foldcolumn=5 " 设置折叠栏宽度 -
常用命令
za 打开/关闭在光标下的折叠
zA 循环地打开/关闭光标下的折叠
zo 打开 (open) 在光标下的折叠
zO 循环打开 (Open) 光标下的折叠
zc 关闭 (close) 在光标下的折叠
zC 循环关闭 (Close) 在光标下的所有折叠
zM 关闭所有折叠
zR 打开所有的折叠
5. quickfix 设置
通过quickfix命令集,可以在vim内编译程序,并且直接跳转到出错位置进行修正,
然后接着进行编译和修正,直到不再出错为止。在 vim的配置文件~/.vimrc文件中加入如下配置:
"-- QuickFix setting --
|
下面的命令运行 "make" (包括你所给出的参数) 程序并捕捉其运行结果: >
:make {arguments}
如果编译时出现错误,按 ,回到vim界面,看不到出错信息了!这时,可以运行以下命令
:cw[indow] 打开quickfix窗口来查看出错信息,它会自动跳到第一处出错的地方。然后,你可以双击出错某一条出错信息,vim就会自动跳转到相应的出错位置
:cn[ext] 光标移到下一个错误所在的行
:cp[revious] 光标移到上一个错误所在的行
:cfirst 到第一处错误
:clast 到最后一处错误
:cc 空间不够时,Vim 会缩短出错信息。如果你想查看详细信息,可以使用此命令
:cl[ist] 列出所有出错信息的概览(只有那些含有文件名或行数的错误信息会被显示,需要查看那些并不含文件名或行数的信息可用“:cl[ist]!”命令)
6. ctags配置
ctags 可以建立源码树的标签索引,用于快速定位函数、变量等。
$sudo apt-get install ctags #安装ctags
$ ctags -R * #建立索引文件
~/.vimrc中对ctgs的使用进行配置
"-------------------------------------ctags设置----------------------------
|
tag命令用法:
Ctrl+] 跳到当前光标下单词的标签
Ctrl+O 返回上一个标签
Ctrl+T 返回上一个标签
:tag TagName 跳到TagName标签
以上命令是在当前窗口显示标签,当前窗口的文件替代为包标签的文件,当前窗口光标跳到标签位置。如果不希望在当前窗口显示标签,可以
:stag TagName 新窗口显示TagName标签,光标跳到标签处
Ctrl+W + ] 新窗口显示当前光标下单词的标签,光标跳到标签处
当一个标签有多个匹配项时(函数 (或类中的方法) 被多次定义),”:tags” 命令会跳转到第一处。如果在当前文件中存在匹配,那它将会被首先使用。
可以用这些命令在各匹配的标签间移动:
:tfirst 到第一个匹配
:[count]tprevious/tp 向前 [count] 个匹配
:[count]tnext/tn 向后 [count] 个匹配
:tlast 到最后一个匹配
或者使用以下命令选择要跳转到哪一个
:tselect TagName
输入以上命令后,vim会为你展示一个选择列表。然后你可以输入要跳转到的匹配代号 (在第一列)。其它列的信息可以让你知道标签在何处被定义过。
以下命令将在预览窗口显示标签
:ptag TagName 预览窗口显示TagName标签,光标跳到标签处
Ctrl+W + } 预览窗口显示当前光标下单词的标签,光标跳到标签处
:pclose 关闭预览窗口
:pedit file.h 在预览窗口中编辑文件file.h(在编辑头文件时很有用)
:psearch atoi 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。
5. 管理vim插件 pathogen
通过pathogen,可以管理vim插件。
当自己下载安装vim插件的时候,也可以在自己的插件子目录~/.vim下。在~/.vim 子目录下,设置插件目录plugin 和文档目录doc.
使用手动方式进行拷贝添加:解压 xxx.zip,将 解压后的目录中的 autoload, plugin, doc 目录中的文件拷贝到 ~/.vim目录下
对应的autoload, plugin, doc 目录中去(直接解压覆盖安装即可
)。
或者使用pathogen 插件管理器来管理插件,pathogen在~/.vim/autoload目录下有 pathogen.vim, 然在.vim目录下建立
bundle目录,在bumdle目录下执行 git clone xxxx.git 获得插件,即可完成自动安装。同时,在.vimrc 文件中添加
execute pathogen#effect()
execute pathogen#helptags()
6. vim 自动补全 Onmicpp-Complete
vim的自动补全功能可以通过 Omnicpp-Complete来实现。
在~/.vimrc 配置文件中进行配置:
"-- omnicppcomplete setting --
|
OnmiCppComplete是基于ctags数据库即tag文件来自动补全的,所以在使用ctags -R 生成tag文件时需要加入其他选项,
才能与OnmiCppComplete配合。
ctags -R —c++-kinds=+p —fields=+iaS —extra=+q .
—c++-kinds=+p : 为C++文件增加函数原型的标签
—fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
—extra=+q : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全
例如,为了添加标准c++的代码补全。
- 下载c++的源代码
$sudo apt-get install build-essential (源码会放在/usr/include/c++ 目录下)
- 然后生成和omnicppcomplete连接的tags文件
在/usr/include/c++目录下执行,ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . 生成tags文件
- 在.vimrc 文件中添加
set tags+=/usr/include/c++/tags
注意:在自动补全的点,Vim必须知道可能补全的定义。比如说,在namespace std命名空间下的变量和函数,必须要用using namespace std;暴露出来,否则是不能补全的。
在.cpp文件中还可以,在.h文件中这样就不是好的做法了。暂时不知道这个问题是由于我自己配置错误还是程序没有实现。
当自动补全下拉窗口弹出后,一些可用的快捷键:
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 拼写建议
帮助文档
:help omnicppcomplete
7. 提示函数原型 echo_func
echofunc可以在命令行中提示当前输入函数的原型。
echofunc下载地址:<http://www.vim.org/scripts/script.php?script_id=1735> 下载完成后,把echofunc.vim文件放到 ~/.vim/plugin
文件夹中
当你在vim插入(insert)模式下紧接着函数名后输入一个”(“的时候, 这个函数的声明就会自动显示在命令行中。如果这个函数有多个声明,
则可以通过按键”Alt+-“和”Alt+=”向前和向后翻页,
这个两个键可以通过设置g:EchoFuncKeyNext和g:EchoFuncKeyPrev参数来修改。这个插件需要tags文件的支持,
并且在创建tags文件的时候要加选项”—fields=+lS”(OmniCppComplete创建的tag文件也能用),
整个创建tags文件的命令如下:
$ ctags -R —fields=+lS
8. 标签浏览器 TagList
Taglist了列出了当前文件中的所有标签,宏、变量、函数等。
安装taglist: 下载taglist 的压缩包, 解压缩到 ~/.vim 目录覆盖 doc和plugin目录即可。
配置taglist:
|
9. cscope 设置
Cscope是一个类似于ctags的工具,不过其功能比ctags强大很多。
- 安装Cscope
$ sudo apt-get install cscope - 在vim配置文件/home/user/.vimrc中加入如下的配置:
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数据库
$ cscope -Rbq
$ 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 ifcscop
注意:帮助文档if_cscop中,快捷键映射nmap <C->i :cs find i ^=expand(““)$是有误的!
比如光标“header.h”上按下i,也就是查找包含“header.h“的文件。但是按照这个映射规则,则是将i映射为cs find i ^header.h$,也就是查找包含“^header.h$“的文件,这显然不是我们想要的结果。该映射规则应该改成nmap i :cs find i =expand(““)
10. vim 常用快捷键
% 跳转到配对的括号去
|
参考文章:
http://www.cnblogs.com/zhangsf/archive/2013/06/13/3134409.html