【总结】gvim+ctags+cscope+taglist阅读Linux源码

来源:互联网 发布:如何申请淘宝小号流程 编辑:程序博客网 时间:2024/06/05 15:40

效果图

这里写图片描述

1. 插件管理

安装vundle

1.1 建立文件夹

在home文件夹下创建.vim .vim/bundle,修改权限

rick@ubuntu:~$sudo mkdir -p .vim/bundlerick@ubuntu:~$ ls -al .vimtotal 12drwxr-xr-x  3 root root 4096 729 16:41 .drwxr-xr-x 22 rick rick 4096 729 16:41 ..drwxr-xr-x  2 root root 4096 729 16:41 bundlerick@ubuntu:~$ sudo chmod 777 .vim -Rrick@ubuntu:~$ ls -al .vimtotal 12drwxrwxrwx  3 root root 4096 729 16:41 .drwxr-xr-x 22 rick rick 4096 729 16:41 ..drwxrwxrwx  2 root root 4096 729 16:41 bundle

1.2 下载

vundle 会接管 .vim/ 下的所有原生目录,所以先清空该目录,再通过如下命令安装 vundle:

rick@ubuntu:~$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vimrick@ubuntu:~$ ls -al .vim/bundle/total 12drwxrwxrwx 3 root root 4096 729 16:45 .drwxrwxrwx 3 root root 4096 729 16:41 ..drwxrwxr-x 8 rick rick 4096 729 16:45 Vundle.vim

1.3 配置文件

将.vimrc文件复制到home文件夹下

  rick@ubuntu:~/work/vim$ cp .vimrc ../..

1.4 更新,安装插件

打开配置文件

rick@ubuntu:~$ vim .vimrc

在下面添加所需要的插件

...call vundle#begin()Plugin 'VundleVim/Vundle.vim'Plugin 'altercation/vim-colors-solarized'Plugin 'tomasr/molokai'Plugin 'vim-scripts/phd'Plugin 'Lokaltog/vim-powerline'Plugin 'octol/vim-cpp-enhanced-highlight'Plugin 'nathanaelkane/vim-indent-guides'Plugin 'derekwyatt/vim-fswitch'Plugin 'kshenoy/vim-signature'Plugin 'vim-scripts/BOOKMARKS--Mark-and-Highlight-Full-Lines'Plugin 'majutsushi/tagbar'Plugin 'vim-scripts/indexer.tar.gz'Plugin 'vim-scripts/DfrankUtil'Plugin 'vim-scripts/vimprj'Plugin 'dyng/ctrlsf.vim'Plugin 'terryma/vim-multiple-cursors'Plugin 'scrooloose/nerdcommenter'Plugin 'vim-scripts/DrawIt'Plugin 'SirVer/ultisnips'Plugin 'derekwyatt/vim-protodef'Plugin 'scrooloose/nerdtree'Plugin 'fholgado/minibufexpl.vim'Plugin 'gcmt/wildfire.vim'Plugin 'sjl/gundo.vim'Plugin 'Lokaltog/vim-easymotion'Plugin 'suan/vim-instant-markdown'Plugin 'lilydjwg/fcitx.vim'Plugin 'vim-scripts/cscope.vim'Plugin 'vim-scripts/taglist.vim'call vundle#end()

安装插件,vim打开任意文件,执行以下命令

:PluginUpdate:PluginInstall:PluginClean

2. 常用插件

2.1 ctags

2.1.1 安装

rick@ubuntu:~$ sudo apt-get install ctags

2.1.2 检查

rick@ubuntu:~$ ctags --helpExuberant Ctags 5.9~svn20110310, Copyright (C) 1996-2009 Darren Hiebert  Compiled: Oct  7 2014, 13:52:34  Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net  Optional compiled features: +wildcards, +regexUsage: ctags [options] [file(s)]…

2.1.3 tags文件

进入内核目录执行ctags -R

rick@ubuntu:~$ cd work/linux/src/linux-2.6.22/rick@ubuntu:~/work/linux/src/linux-2.6.22$ ctags -R

目录下生成tags文件

rick@ubuntu:~/work/linux/src/linux-2.6.22$ ll tags -rw-rw-r-- 1 rick rick 78414446 107 18:45 tags

在vim中执行

 : set tags=/home/work/linux/src/linux-2.6.22/tags

2.1.4 使用方法

把光标定位到某一函数名上或者宏上, 按下 Ctrl + ], vim就可以自动切换到该函数定义处!
要返回只需要按下Ctrl + o 或者 Ctrl + t.

2.1.5 例子

打开init/main.c文件

这里写图片描述

光标移到max_cpus处,
按下 Ctrl + ],查看定义
按下Ctrl + o,返回

2.2 cscope

2.2.1 安装

rick@ubuntu:~$ sudo apt-get install cscope

2.2.2 检查

rick@ubuntu:~$ cscope --helpUsage: cscope [-bcCdehklLqRTuUvV] [-f file] [-F file] [-i file] [-I dir] [-s dir]              [-p number] [-P path] [-[0-8] pattern] [source files]

2.2.3 数据库文件

进入内核目录,执行

rick@ubuntu:~/work/linux/src/linux-2.6.22$ cscope -Rbkqrick@ubuntu:~/work/linux/src/linux-2.6.22$ ll cscope*-rw-rw-r-- 1 rick rick    294201 107 14:37 cscope.files-rw-rw-r-- 1 rick rick  15589376 107 14:38 cscope.in.out-rw-rw-r-- 1 rick rick 125349471 107 14:38 cscope.out-rw-rw-r-- 1 rick rick  92668236 107 14:38 cscope.po.out

2.2.4 配置

将数据库文件添加到.vimrc中

..."cscopennoremap <leader>fa :call cscope#findInteractive(expand('<cword>'))<CR>nnoremap <leader>l :call ToggleLocationList()<CR>" s: Find this C symbolnnoremap  <leader>fs :call cscope#find('s', expand('<cword>'))<CR>" g: Find this definitionnnoremap  <leader>fg :call cscope#find('g', expand('<cword>'))<CR>" d: Find functions called by this functionnnoremap  <leader>fd :call cscope#find('d', expand('<cword>'))<CR>" c: Find functions calling this functionnnoremap  <leader>fc :call cscope#find('c', expand('<cword>'))<CR>" t: Find this text stringnnoremap  <leader>ft :call cscope#find('t', expand('<cword>'))<CR>" e: Find this egrep patternnnoremap  <leader>fe :call cscope#find('e', expand('<cword>'))<CR>" f: Find this filennoremap  <leader>ff :call cscope#find('f', expand('<cword>'))<CR>" i: Find files #including this filennoremap  <leader>fi :call cscope#find('i', expand('<cword>'))<CR>if filereadable("cscope.out")    cs add csope.outelseif $CSCOPE_DB  != ""    cs add $CSCOPE_DBendif…

2.2.5 使用方法

<leader>fs  s: Find this C symbol<leader>fg  g: Find this definition<leader>fd  d: Find functions called by this function<leader>fc  c: Find functions calling this function<leader>ft  t: Find this text string<leader>fe  e: Find this egrep pattern<leader>ff  f: Find this file<leader>fi  i: Find files #including this file

2.2.6 例子

打开init/main.c文件

这里写图片描述

按下;fs,查看所有max_cpus出现的地方

这里写图片描述

2.3 taglist

2.3.1 安装

taglist 由vundle管理

打开.vimrc文件,将taglist添加到vundle插件列表中

 Plugin 'vim-scripts/taglist.vim'

执行安装

:PluginInstall

在配置文件.vimrc中,配置taglist

nmap <F7> :TlistToggle<CR>let Tlist_Ctags_Cmd="/usr/bin/ctags"                 let Tlist_Inc_Winwidth=0            let Tlist_Exit_OnlyWindow=0

2.3.2 使用

F7打开或隐藏tag list

这里写图片描述

这里写图片描述

2.4 NERDTree

工程文件浏览插件

2.4.1 安装

NERDTree由vundle管理

打开.vimrc文件,将nerdtree添加到vundle插件列表中

Plugin 'scrooloose/nerdtree'

执行安装

:PluginInstall

在配置文件.vimrc中,配置NERDTree

..." 工程文件浏览" 使用 NERDTree 插件查看工程文件。设置快捷键,速记:file listnmap <Leader>fl :NERDTreeToggle<CR>" 设置 NERDTree 子窗口宽度let NERDTreeWinSize=22" 设置 NERDTree 子窗口位置let NERDTreeWinPos="right"" 显示隐藏文件let NERDTreeShowHidden=1" NERDTree 子窗口中不显示冗余帮助信息let NERDTreeMinimalUI=1" 删除文件时自动删除文件对应 bufferlet NERDTreeAutoDeleteBuffer=1…

2.4.2 使用方法

;fl,打开隐藏NERDTree

这里写图片描述

这里写图片描述

3. 其他vim命令

ctrl+Tab    正向遍历bufferctrl+shift+Tab  逆向遍历buffer;+hw    跳转左侧window;+lw    跳转右侧window;+kw    跳转上侧window;+jw    跳转下侧window

参考资料

像 IDE 一样使用 vim
使用 vim + ctags + cscope + taglist 阅读源码

原创粉丝点击