MAC将Vim配置为类Sourceinsight代码阅读工具

With reference to a article about How to configure Vim under Linux, then, try to fix Mac-Vim as SourceInsight-like codes reader. 


Mac is UNIX-like system, thus, in order to install plugin for Vim, we need package management tools, such as Flink, MacPorts and Homebrew. Highly recommend the Homebrew for the reason refer to the comparasion on ZHIHU.(If u can't read chinese, please google the comparison between them)


Now, come into conclusion, follow the instruction below.


Step 1: Install Homebrew(Reference Link)

Please make sure ur system meet following requisitions:

1) Base on Intel CPU

2) Operating system is Mac OS X 10.5 Leopard or higher version

3) Already installed Git(Mac OS X 10.7 Lion has been pre-installed)

4) Installation of Xcode development tools

5) Installation of Java Developer Update

The installation of Homebrew is quite simple, using command line below:

/usr/bin/ruby -e "$(/usr/bin/curl -fksSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"

  • In China, maybe you need F*ck the GFW. Recommend to use GoAgent to f*ck GFW.
  • Usage of Homebrew refer toHERE.


Step 2:  Install ctags

#set proxy for terminal, use following command
#export http_proxy='127.0.0.1:8087'
$brew install ctags


More infos about ctags, dig intothis link.

怎样的参数来使ctags正常的生成我们需要的tags文件呢?在这里我们就不去挨个学习那些枯燥的参数了,直接参看 omnicppcomplete 提供的ctags生成语句:

ctags ---c++-kinds=+px --fields=+iaS --extra=+q .

每个参数解释如下:

-R:ctags循环生成子目录的tags

--c++-kinds=+px :ctags记录c++文件中的函数声明和各种外部和前向声明

--fields=+iaS :ctags要求描述的信息,其中i表示如果有继承,则标识出父类;a表示如果元素是类成员的话,要标明其调用权限(即是public还是private);S表示如果是函数,则标识函数的signature。

--extra=+q:强制要求ctags做如下操作—如果某个语法元素是类的一个成员,ctags默认会给其记录一行,可以要求ctags对同一个语法元素再记一行,这样可以保证在VIM中多个同名函数可以通过路径不同来区分。

OK,那么tags文件就生成好啦,利用这个文件我们可以做很多强大的事情,包括前面用过的插件,omnicppcomplete、taglist、showfunc之类的,都是依赖于它的。

那么除了插件上的作用外,我们用户在vim里面怎么使用他呢?

其实最简单的就是:把光标移动到某个元素上,CTRL+],就会跳转到对应的定义啦。CTRL+o可以回退到原来的地方。

还有一个操作经常被人忽略,就是,如果当前光标下是个局部变量,在VIM里输入gd的话,就会跳到这个局部变量的定义处,也是非常方便滴~~

另外,tags必须在vim运行的当前目录,才能在vim里面正确跳转,当然也不是没有办法解决:settags="tags的文件路径"即可,不过如果像我前面文章说的那样定义了F12来快速生成tags的话(快速连接),也不会经常用到更改路径吧



Step 3: Install CScope

安装后从终端进入源码所在的目录,输入 cscope -Rbq,会在当前目录下生成三个文件:cscope.out、cscope.in.out、cscope.po.out。
其中cscope.out是基本的符号索引,后两个文件是使用”-q”选项生成的,可以加快cscope的索引速度。
-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
同时可以使用选项-k,表示在生成索引文件时,不搜索/usr/include目录。
3、cscope的一些快捷键
"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    查找包含本文件的文件

Step 4: Vim需要安装的插件( 参考链接)

vim需要安装的插件:

1、taglists

下载地址:

http://www.vim.org/scripts/script.php?script_id=273

将下载后的taglist解压,将plugin目录下的taglist.vim录制到/usr/share/vim/vim73/plugin/下,将doc目录下的taglist.txt复制到/usr/share/vim/vim73/doc/下。

进入到/usr/share/vim/vim73/doc/目录,在终端下输入vim进入vim,在正常模式下输入":helptags .",不包括引号,但要注意有一个空格和一个点,表示当前路径。

退回到主目录,打开/etc/vimrc或主目录下的.vimrc,添加以下命令:

nnoremap :TlistToggle

关闭vim并再次进入后,按键盘上的F3,即可打开,再按一次关闭。ctrl+w w(两个w)为在窗口间切换

(注:该插件可用tagbar插件替代,为taglist的一个增强版,具体可参考http://www.cnblogs.com/taskiller/archive/2012/08/14/2637689.html)



2、NERDTree

下载地址:

http://www.vim.org/scripts/script.php?script_id=1658

https://github.com/scrooloose/nerdtree

可以与3、winmanager任选其一,也可以都使用,不过据说winmanager不支持列表自动更新,但可以通过设置解决。

下载后解压,将nerdtree_plugin、plugin、syntax三个目录下的.vim文件拷贝到/usr/share/vim/vim73/plugin/目录下。

将doc目录下的.txt文件拷贝到/usr/share/vim/vim73/plugin/目录下。

进入到/usr/share/vim/vim73/doc/目录,在终端下输入vim进入vim,在正常模式下输入":helptags .",不包括引号,但要注意有一个空格和一个点,表示当前路径。

退回到主目录,打开/etc/vimrc或主目录下的.vimrc,添加以下命令:

let NERDTreeWinPos='right'

nnoremap :NERDTreeToggle

关闭vim并再次进入后,按键盘上的F2,即可打开类似于IDE窗口的文件浏览器与函数、变量列表,再按一次F2关闭。ctrl+w w(两个w)可以在窗口间切换。


NerdTree的快捷键映射

o.......在已有窗口中打开文件、目录或书签,并跳到该窗口 .....|NERDTree-o| 

go......在已有窗口中打开文件、目录或书签,但不跳到该窗口 .....|NERDTree-go| 

t.......在新Tab中打开选中文件/书签,并跳到新Tab .....|NERDTree-t| 

T.......在新Tab中打开选中文件/书签,但不跳到新Tab .....|NERDTree-T| 

i.......split一个新窗口打开选中文件,并跳到该窗口 .....|NERDTree-i| 

gi......split一个新窗口打开选中文件,但不跳到该窗口 .....|NERDTree-gi| 

s.......vsp一个新窗口打开选中文件,并跳到该窗口 .....|NERDTree-s| 

gs......vsp一个新窗口打开选中文件,但不跳到该窗口 .....|NERDTree-gs| 

!.......执行当前文件 .....|NERDTree-!| 

O.......递归打开选中结点下的所有目录 .....|NERDTree-O| 

x.......合拢选中结点的父目录 .....|NERDTree-x| 

X.......递归合拢选中结点下的所有目录 .....|NERDTree-X|

e.......Edit the current dif .....|NERDTree-e| 

双击......相当于NERDTree-o 

中键......对文件相当于NERDTree-i,对目录相当于NERDTree-e 

D.......删除当前书签 

P.......跳到根结点 

p.......跳到父结点 

K.......跳到当前目录下同级的第一个结点 

J.......跳到当前目录下同级的最后一个结点 

...跳到当前目录下同级的前一个结点 

...跳到当前目录下同级的后一个结点 

C.......将选中目录或选中文件的父目录设为根结点 

u.......将当前根结点的父目录设为根目录,并变成合拢原根结点 

U.......将当前根结点的父目录设为根目录,但保持展开原根结点 

r.......递归刷新选中目录 

R.......递归刷新根结点 

m.......显示文件系统菜单 

cd......将CWD设为选中目录 

I.......切换是否显示隐藏文件 

f.......切换是否使用文件过滤器 

F.......切换是否显示文件 

B.......切换是否显示书签 

q.......关闭NerdTree窗口 

?.......切换是否显示Quick Help



3、winmanager

下载地址:

http://www.vim.org/scripts/script.php?script_id=95

网站上说只支持到vim6.0,不过我用7.3也能正常使用,没有问题。

下载后,解压,将plugin目录下的三个文件winfileexplorer.vim、winmanager.vim与wintagexplorer.vim复制到/usr/share/vim/vim73/plugin/目录下。

将doc目录下的winmanager.txt复制到/usr/share/vim/vim73/doc/目录下。

进入到/usr/share/vim/vim73/doc/目录,在终端下输入vim进入vim,在正常模式下输入":helptags .",不包括引号,但要注意有一个空格和一个点,表示当前路径。

退回到主目录,打开/etc/vimrc或主目录下的.vimrc,添加以下命令:

let g:winManagerWindowLayout='FileExplorer|TagList'

nnoremap :WMToggle

关闭vim并再次进入后,按键盘上的F2,即可打开类似于IDE窗口的文件浏览器与函数、变量列表,再按一次F2关闭。ctrl+w w(两个w)可以在窗口间切换。


4、用过Source Insight的coder应该知道SI有一个很强大的功能,就是它有一个“Context Window”,就是当光标移动到某一变量或函数时,context window会显示出该变量或函数的定义。VIM也可以实现该功能,利用的是一个名叫SrcExpl的插件。

下载地址:http://www.vim.org/scripts/script.php?script_id=2179

该插件只有一个.vim文件,下载后将其放到/uar/share/vim/vim73/plugin/目录下。

打开/etc/vimrc或主目录下的.vimrc,添加以下命令:

"=================== SrcExpl ==================== 

nmap :SrcExplToggle "快捷键映射 

let g:SrcExpl_winHeight = 8 "默认高度 

let g:SrcExpl_refreshTime = 100 "更新时间(ms) 

let g:SrcExpl_isUpdateTags = 0 "每次打开SrcExpl时是否更新tags(0为不更新) 

let g:SrcExpl_updateTagsKey = "" "更新tags的快捷键

"映射光标在窗口间移动的快捷键

nmap h

nmap j

nmap k

nmap l










你可能感兴趣的:(Vim,Mac)