vim+ctags+cscope安装与使用总结(不断补充中)
ctags
1、安装ctags
1) sudo apt-get install ctags 或者
2) 在http://ctags.sourceforge.net/ 下载源代码包之后,解压缩生成源代码目录
进入源代码目录执行./configure & make & make install
2、vim中ctags简单使用
详细的使用ctags用法,在vim中使用:help tags
1)生成tags文件
在源码根目录下执行ctags -R命令来为程序源代码生成标签文件,其-R选项表示递归操作,同时为子目录也生成标签文件,vim利用生成的标签文件,可以进行检索,并在不同的文件、元素之间来回切换。
也可以用ctags file_name1.c filename2.c filename3.h来产生ctags文件或者ctags *.c *.h
2)字段补全
为了使得字段补全有效,在生成tags时需要一些额外的参数,推荐的c++参数主要是:
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q
其中:
选项c++-kinds 用于指定C++语言的 tags记录类型, --c-kinds用于指定C语言的, 通用格式是 --{language}-kinds
选项 fileds 用于指定每条标记的扩展字段域
extra 选项用于增加额外的条目: f表示为每个文件增加一个条目, q为每个类增加一个条目
3)指定tags文件位置
可以手动指定tags文件
a)在vim命令行中输入或者修改.vimrc文件 set tags=./tags(当前路径下的tags文件)
如果要引用多个不同目录的tags文件,可以用逗号隔开,set tags=path1, path2...,或者
set tags+=path
set tags+=path
b)如果经常在不同工程里查阅代码,那么可以在~/.vimrc中添加:
set tags=tags;
set autochdir
第一个命令里的分号是必不可少的,这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,就到父目录中查找,一直向上递归。因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。
4)跳转到指定函数
在变量或函数处 ctrl+] 来跳转到变量或者函数定义的地方。ctrl+t返回到跳转前的位置。
或者使用命令:tag func_nameshi 来跳转到变量或者函数定义的地方。
ctags不会生成局部变量的索引。
:tags会列出查找/跳转过程
3、ctags的局限性
tags文件只能查看函数,类或变量的定义,而没有被调用信息。
如果要知道一个函数在什么地方被使用,需要使用cscope工具。
添加的tags最好是source code的索引,对于include头文件索引没有效果,
taglist
taglist插件是以vim脚本的形式存在,因此只需要将其下载下来放到相应的目录即可。
taglist基于ctags才能发挥作用,因此要确保安装了ctags。
通过在vim命令行下运行help taglist.txt查询taglist的用法。
其英文原版手册:http://vim-taglist.sourceforge.net/manual.html
1、安装taglist
1)从http://vim-taglist.sourceforge.net/index.html 下载taglist安装包。
2)进入~/.vim目录,将taglist安装包解压,将解压后的/doc和/plugin目录复制到.vim目录下
3)进入~/.vim/doc目录,在vim下运行helptag .命令。这个步骤是将doc下的帮助文档加入到vim的帮助主题中,这样我们就可以通过在vim中运行help taglist.txt查看taglist帮助。
4)打开配置文件~/.vimrc,加入以下两行:
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
到此安装已经完成。
在vim命令行下运行:Tlist(:TlistOpen, :TlistToggle)打开Taglist窗口,
运行:Tlist(:TlistClose, :TlistToggle)关闭Taglist窗口,
我们可以通过ctrl+w快捷键或者鼠标点击在Taglist窗口和编辑区之间切换焦点,在Taglist窗口用鼠标选择某个符号并点击或者用键盘选择某个符号并回车,就可以跳转到该符号定义的位置。
2、其他一些选项可在~/.vimrc脚本中添加。如:
"设置ctags路径
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
"启动vim后自动打开taglist窗口
let Tlist_Auto_Open = 1
"不同时显示多个文件的tag,仅显示一个
let Tlist_Show_One_File = 1
"taglist为最后一个窗口时,退出vim
let Tlist_Exit_OnlyWindow = 1
"taglist窗口显示在右侧,缺省为左侧
let Tlist_Use_Right_Window =1
"设置taglist窗口大小
"let Tlist_WinHeight = 100
let Tlist_WinWidth = 40
"设置taglist打开关闭的快捷键F8
noremap <F8> :TlistToggle<CR>
"更新ctags标签文件快捷键设置
noremap <F6> :!ctags -R<CR>
NERDTree
1、下载地址:http://www.vim.org/scripts/script.php?script_id=1658
2、解压得到doc/,nerdtree_plugin/,plugin/,syntax/
将后面3个文件夹的xxx.vim结尾的插件复制到./vim/plugin/目录下,并chmod a+x权限,
将doc/目录下的NERD_tree.txt复制到./vim/doc目录下并在当前目录下执行vim,在vim命令行中:helptags .,这样以后就能在vim中通过:help NERD_tree.txt来查看对应的帮助文档。
现在已经可以通过:NERDTreeToggle来在vim中显示文件列表,只不过现在文件列表栏显示在左边,需要修改配置。
3、配置
在./vimrc内容中添加
let NERDTreeWinPos='right'
noremap <F9> :NERDTreeToggle<CR>
这样以后在vim中直接按F9就能在右边显示文件列表栏了。
4、知识
现在NERDTree好像不支持搜索文件的功能,只能一个一个找,如果要使vim支持搜索文件还要装对应的插件。
cscope
1、安装cscope
sudo apt-get install cscope
2、知识点
1) 生成索引文件cscope -Rbq则生成cscope.in.out cscope.out cscope.po.out三个文件
1) :cs add path/cscope.out 添加索引文件的位置
2)
:cs find c function 查看function被调用的位置
:cs find s 查找本c符号
:cs find g 查找本定义
:cs find d 查找本函数调用的函数
:cs find t 查找本字符串
:cs find f 查找本文件
:cs find i 查找包含本文件的文件
3)在~/.vimrc中添加set cscopequickfix=s-,c-,d-,i-,t-,e-
这样通过:cs find xxx查找某个符号后,会立即跳转到第一个找到该符号出现的位置,
然后可以通过:copen来打开quickfix窗口,在quickfix窗口中显示所有出现的位置。
Cscope的使用(领略Vim + Cscope的强大魅力)
vim
1、高亮所有搜索模式匹配
shift + * 向后搜索光标所在位置的单词
shift + # 向前搜索光标所在位置的单词
n和N可以继续向后或者向前搜索匹配的字符串
:set hlsearch 高亮所有匹配的字符串
:nohlsearch 临时关闭
:set nohlsearch 彻底关闭,只有重新:set hlsearch才可以高亮搜索
vim高亮显示光标所在的单词,在单词的地方输入gd
2、语法高亮
syntax on
syntax off
3、vimgrep
vimgrep /匹配模式/[g][j] 要搜索的文件/范围
g: 表示是否把每一行的多个匹配结果都加入
j: 表示是否搜索完后定位到第一个匹配的位置
vimgrep /pattern/% 在当前打开文件中查找
vimgrep /pattern/ * 在当前目录下查找所有
vimgrep /pattern/ ** 在当前目录及其子目录下查找所有
vimgrep /pattern/ *.c 查找当前目录下所有的.c文件
vimgrep /pattern/ **/* 只查找子目录
cn 查找下一个
cp 查找上一个
copen 打开quickfix
cw 打开quickfix
cclose 关闭quickfix
help vimgrep 查看vimgrep帮助
通过:vimgrep /pattern/gj path来查找字符串,最好将右边的文件列表显示栏关闭,这样quickfix窗口显示比较方便查看。
4、修改了配置文件.vimrc并保存后,如果希望不重启vim而让配置立即生效,可以在打开的vim中执行:source ~HOME/.vimrc
5、vim颜色配置方案
highlight 可以查看具体的颜色配置
highlight LineNr term=underline,bold ctermfg=3 guifg=Brown
Set colorcolumn=80 设置边界线为80列
Set colorcolumn=0 取消边界线设置
Highlight colorcolumn ctermbg=4 guibg=Blue
:help cterm-colors可以查看颜色对应的值
6、vim打开多个文件
vim file1 file2 file3 file4
或者进入vim后使用:e文档名来打开文档
:n 跳到后面那个文件
:N 跳到前面那个文件
:files查看打开了哪些文件
:file 查看当前的文件名
7、vim自动补全
ctrl + n或者ctrl + p
http://jingyan.baidu.com/article/76a7e409b5d525fc3b6e15fc.html
8、复制vim文件中所有内容
gg 回到文件首
shift + v 进入VISUAL LINE模式
shift + g 全选所有内容
ctrl + insert 复制所选的内容
9、[[跳到函数头部,]]跳到函数尾部
10、quickfix是vim的标准插件,本身就带有
quickfix功能将编译过程中产生的错误信息保存到文件中,然后vim利用这些信息跳转到源文件的对应位置,我们就可以进行错误的修正,之后跳到下一个错误重复上述操作,从而极大地提高编译错误的修改效率
quick常用命令:
:cc 显示详细错误信息
:cp 跳到上一个错误
:cn 跳到下一个错误
:cl 列出所有的错误
:copen 打开quickfix窗口,可以在后面添加窗口高度参数,如10行,:copen 10
:cclose 关闭quickfix窗口
11、按v进入可视化界面,然后通过左右键选择文本,再按y进行复制,p就可以进行粘帖了
12、不退出vim,直接在vim中执行":!gcc file.c -o file"就可以编译程序了
13、vim中查找特地字符串
/pattern enter
n 朝同一个方向搜索
N 朝反方向搜索
/ pattern enter
要查找单个单词,键入该单词,并在这个单词的两边都加上空格
/^pattern enter
要查找仅出现在行首的单词,请在该单词前面加上^
/pattern$ enter
要查找仅出现在行末的单词,请在该单词的后面加上$
如果要把^和$当作普通的符号,就需要在前面加上