您的位置:首页 > 其它

将vim打造成类似source insight的IDE

2014-04-13 01:06 155 查看
方法不一定是最好的,不过是我目前正在用的,感觉还不错,做以记录

(一)需要安装的程序:

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