您的位置:首页 > 运维架构

Vim配置(常用配置+Cscope+taglist)

2012-05-26 23:32 411 查看
有两个网站关于vim讲的非常好:
http://www.vimer.cn/

http://easwy.com/blog/ 很敬佩这位大牛!!

下载插件的官网是:搜一下想找的插件立马就会出来,官网很强大。

http://www.vim.org/scripts/

vim 默认安装在/usr/share/vim 里面vim73 和 vimfiles 两个文件夹,vim73中有一些.vim文件

vim配置文件为 /etc下的vimrc文件

Vim 中使用Cscope+taglist

1,Cscope 以及Ctag索引文件的建立:

为了方便使用,编写了下面的脚本来更新cscope和ctags的索引文件:

#!/bin/sh

find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files

cscope -bkq -i cscope.files

ctags -R

这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。

其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。

这个脚本,首先使用find命令,查找当前目录及子目录中所有后缀名为".h", ".c"和".c"的文件,并把查找结果重定向到文件cscope.files中。 然后cscope根据cscope.files中的所有文件,生成符号索引文件。最后一条命令使用ctags命令,生成一个tags文件,在vim中执行":help tags"命令查询它的用法。它可以和cscope一起使用。上面所用到的命令参数,含义如下:

-R: 在生成索引文件时,搜索子目录树中的代码

-b: 只生成索引文件,不进入cscope的界面

-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度

-k: 在生成索引文件时,不搜索/usr/include目录

-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件列表。

-I dir: 在-I选项指出的目录中查找头文件

-u: 扫描所有文件,重新生成交叉索引文件

-C: 在搜索时忽略大小写

-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

2,在VIM加载cscope.out文件

在VIM中使用cscope非常简单,首先调用“cscope add”命令添加一个cscope数据库,然后就可以调用“cscope find”命令进行查找了。VIM支持8种cscope的查询功能,如下:例如,我们想在代码中查找调用work()函数的函数,我们可以输入:“:cs find c work”.

在源代码目录下打开vim。要使用cscope查找就必须加载cscope.out文件.

s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方

g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能

d: 查找本函数调用的函数

c: 查找调用本函数的函数

t: 查找指定的字符串

e: 查找egrep模式,相当于egrep功能,但查找速度快多了

f: 查找并打开文件,类似vim的find功能

i: 查找包含本文件的文

在安装了cscope和ctags的情况下,以下命令特别好使,他们现在cscope.out 数据库中查找,若没有则在ctags中查找

ctrl+]:在函数调用的地方跳转到函数定义的地方

ctrl+t:返回上一个查找的地方

其它命令介绍:ctrl+]:在函数调用的地方跳转到函数定义的地方

ctrl+t:返回上一个查找的地方

特别注意:所生成的cscope.out和tags文件要在打开VIM所在的文件夹,否则VIM无法找到相关符号信息。

3,Cscope快捷键的使用

nmap <C-@><C-@>s :vert scs find s <C-R>=expand("<cword>")<CR><CR>

nmap <C-@><C-@>g :vert scs find g <C-R>=expand("<cword>")<CR><CR>

nmap <C-@><C-@>c :vert scs find c <C-R>=expand("<cword>")<CR><CR>

nmap <C-@><C-@>t :vert scs find t <C-R>=expand("<cword>")<CR><CR>

nmap <C-@><C-@>e :vert scs find e <C-R>=expand("<cword>")<CR><CR>

nmap <C-@><C-@>f :vert scs find f <C-R>=expand("<cfile>")<CR><CR>

nmap <C-@><C-@>i :vert scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>

nmap <C-@><C-@>d :vert scs find d <C-R>=expand("<cword>")<CR><CR>

如果使用快捷键的话,需要自己建立以个文件,将上面的几行复制到文件中 /root/.vim/plugin/cscope_maps.vim

4,taglist的安装和使用

能够列出源文件中的tag(function, class, variable, etc)并跳转.

注意:taglist依赖于ctags,所以要先装ctags,否则taglist装了也没法用!

(1)到http://vim.sourceforge.net/scripts/script.php?script_id=273

下载最新的taglist,我的版本是taglist_45.zip,解压你会发现俩个文件夹:doc和plugin.

(2) 把上面两个文件夹放到$HOME/.vim目录下,或者$HOME/vimfiles或$VIM/vimfiles目录下。

(3)使用

在vim中用":TlistToggle"打开左边的tag窗口,再输一次自动关闭,按ctrl+w可以在窗口之间进行切换,也可以按照如下方法定义一个快捷键

  nnoremap :TlistToggle

":TlistOpen":Open and jump to the taglist window.

":TlistClose":Close the taglist window.

":TlistToggle":Open or close (toggle) the taglist window.

在taglist中的一些操作:

: 跳转到光标处tag的源文件(就是回车键)

o : 打开新窗口,并跳转到光标处tag的源文件。

p : 与

t : 打开新tab并跳转到光标处tag的源文件。

: 显示光标处tag的函数原型

+ : 打开tag组

- : 收拢tag组

x : 最大化/还原
二 . 配置~/.vimrc

下面讲一下~/.vimrc配置文件的设置,下面是我自己的文件的设置

" 开启语法高亮

syntax on

" 设置文字编码自动识别

set fencs=utf-8,cp936

" 使用鼠标

set mouse=a

" 设置高亮搜索

set hlsearch

" 输入字符串就显示匹配点

set incsearch

" 输入的命令显示出来,看的清楚些。

set showcmd

" Tlist的内部变量。函数列表。

let Tlist_Use_Right_Window=1

let Tlist_File_Fold_Auto_Close=1

"函数和变量列表

map :TlistToggle

"全能补全

inoremap

" 没事,鼠标画线玩的。

" noremap :call ToggleSketch()

set wildmenu

" 启动函数变量快速浏览的时间设置

set updatetime=100

然后你就可以在你vim中使用taglist,此时只需要点击F4来打开或者关闭!

经过充实我的~/.vimrc内容如下:

set hlsearch

set ai

syntax on

set number

set nocompatible

set columns=80

filetype on

set history=1000

set autoindent

set smartindent

set tabstop=4

set shiftwidth=4

set showmatch

set guioptions-=T

set vb t_vb=

set ruler

set nohls

set noexpandtab

set ignorecase

set mouse=a

set cindent

set incsearch

set fencs=utf-8,cp936

set showcmd

"Tlist的内部变量。函数列表。

let Tlist_Use_Right_Window=1

let Tlist_File_Fold_Auto_Close=1

" "函数和变量列表

map :TlistToggle

" "全能补全

inoremap

" " 没事,鼠标画线玩的。

noremap :call ToggleSketch()

set wildmenu

" " 启动函数变量快速浏览的时间设置

set updatetime=100

map :split

map :vsplit

map :q!

map :w!

map :wq!

autocmd FileType python set omnifunc=pythoncomplete#Complete

if has("cscope")

set csprg=/usr/bin/cscope

set csto=0

set cst

set nocsverb

" add any database in current directory

if filereadable("cscope.out")

cs add cscope.out

" else add database pointed to by environment

elseif $CSCOPE_DB != ""

cs add $CSCOPE_DB

endif

set csverb

set cscopetag

"set cscopequickfix=s-,g-,d-,t-,e-,f-,i-

endif

附上.vim以及.vimrc
http://tg1a198.mail.163.com/app/wp/doGetFile.jsp?sid=vEQDTWagKqfZdcHkAaggnuFESsZCbTAZ&mode=download&mid=154:1tbimh4gH0R3OUgvAwABsU http://tg1a198.mail.163.com/app/wp/doGetFile.jsp?sid=vEQDTWagKqfZdcHkAaggnuFESsZCbTAZ&mode=download&mid=154:1tbimh4gH0R3OUgvAwAAsV
参考文章:http://blogold.chinaunix.net/u1/59481/showart_1861521.html

cscope的主页在: http://cscope.sourceforge.net/
在vim的网站上,有很多和cscope相关的插件,可以去找一下你有没有所感兴趣的。搜索结果在这里:

   点这里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: