将vim打造成类似source insight的IDE

方法不一定是最好的,不过是我目前正在用的,感觉还不错,做以记录

 

(一)需要安装的程序:

1、ctags

在终端下,输入以下代码来安装程序:

yum install ctags
或
sudo apt-get install ctags

之后,从终端进入源码所在的目录,输入ctags -R,会生成一个名为“tags”的文件。

-R 表示递归子目录,   这个命令的意思就是为当前目录下和其子目录下的文件建立索引( 索引只包含了函数的定义位置)。

 

2、cscope

在终端下,输入以下代码来安装程序:

yum install cscope
或
sudo apt-get 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    查找包含本文件的文件

 

(二)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 <F3> :TlistToggle<CR>

关闭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 <F2> :NERDTreeToggle<CR>

关闭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-J>...跳到当前目录下同级的前一个结点 <C-K>...跳到当前目录下同级的后一个结点 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 <F2> :WMToggle<CR>
关闭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 <F5> :SrcExplToggle<CR> "快捷键映射 let g:SrcExpl_winHeight = 8 "默认高度 let g:SrcExpl_refreshTime = 100 "更新时间(ms) let g:SrcExpl_isUpdateTags = 0 "每次打开SrcExpl时是否更新tags(0为不更新) let g:SrcExpl_updateTagsKey = "<F12>" "更新tags的快捷键
"映射光标在窗口间移动的快捷键
nmap <C-H> <C-W>h
nmap <C-J> <C-W>j
nmap <C-K> <C-W>k
nmap <C-L> <C-W>l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值