vim+cscope+ctags+winmanager+minibufferexplorer

xiaoxiao2021-02-28  40

摘抄自http://blog.csdn.net/scaleqiao/article/details/44278719

以及https://blog.csdn.net/lhf_tiger/article/details/7216500

关于buffer的使用,其实在打开的vim中输入:ls就可以显示已经打开的buffer名字不用说非要设置buffer,但是设置buffer好处是任何时候都可以看。

是在ubuntu上实现查看代码。

1、vim 使用常规安装即可

2、cscope使用常规方法即可。

上述安装完成后,开始使用cscope来索引,步骤为:

(原博客将所有的.c .h都索引了,本次实验只尝试 特定的文件夹  )

在源代码文件夹下执行find . -name ".[h|c]" >cscope.files然后对这个cscope.files文件进行处理为供cscope使用的文件:cscope.out 使用的是如下的命令。

cscope -bkq -i cscope.files

生成不止一个cscope.out还有其他的,只是其他的目前不使用。

虽然直接运行cscope就可以查看,但是我们是想在vi中使用,因此运行了cscope后使用ctrl+d退出。

其中cscope可以使用的命令选项有:

-R: 在生成索引文件时,搜索子目录树中的代码-b: 只生成索引文件,不进入cscope的界面-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度-k: 在生成索引文件时,不搜索/usr/include目录-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用"-",表示由标准输入获得文件列表。-Idir: 在-I选项指出的目录中查找头文件-u: 扫描所有文件,重新生成交叉索引文件-C: 在搜索时忽略大小写-Ppath: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。上面自己使用的是-b k q i.

3、在vim中配置cscope 

如果不想自己配置,可以下载cscope_maps.vim 加入到vim的plugin目录中。

一般自己在总的vimrc中配置位置为:/etc/vim/vimrc中粘贴:

补充一个:将vim设置为打开就有行号,而不用每次都是自己加:set number。其实就是在下面提到的.vimrc文件中随便找一行加入 set number这个命令即可。。。在自己家目录中添加好处是只改动自己的,别的用户不改动,想改动就加载 /etc/vim/vimrc中即可。所以所有软件的环境基本都是运行时候运行的启动配置文件。按道理两个vimrc都会被vi打开时候调用,只是此处家目录优先被读取。 所以依次类推关于vim 或者vi 所有配置都在家目录下的.vimrc即可,所以韩国这边教研室这个同学看我在敲,直接给我发了一份他的配置,人还挺好的。

(先总结下vim怎么使用cscope和ctags的,其中cscope和ctags软件安装完后,仅仅只是软件可以使用,每个工程要想使用还必须给这个工程分别创建两个文件一个是cscope.out文件一个是tags文件,而这两个文件的生成可以使用一个固定的shell脚本,一般都会把脚本放在一个地方,哪个工程用就拷贝到哪个工程最外层然后执行,生成上述两个需要的文件。产生上述文件以后就是怎么在vim中使用,当然vi也可用。有两种使用方法,一种是每次都在这两个文件所在的层打开子目录内的文件,这样才能保证生成的两个文件可用。可用以后才是下面说到的vim中详细使用方法。在配置好之前都不能使用下面的使用方法。第二种是在自己经常操作的家目录中放置一个.vimrc内容,除了常用的set autoindent  或者set cindent  最重要的是加入:for XXX工程:cs add ~/xx/xx/cscope.out  和 set tags=~/xx/xx/tags即可。)  可以每次使用新工程的时候都处理下面对于新的工程的处理。

此处放置两个最基本的使用:

.vimrc里面的内容:

" syntax highlighting if has("syntax") syntax on endif set autoindent set cindent set nu set ts=4 set sw=4 " set cursor to recent cursor au BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "norm g`\"" | \ endif set ruler "格式尺子设置 set laststatus=2 set statusline=\ %<%l:%v\ [%P]%=%a\ %h%m%r\ %F\ "for linux kernel "set csprg=/usr/bin/cscope "set csto=0 "set cst "cs add ~/kernel/4.14-original/linux/cscope.out "set csverb "set tags=~/kernel/4.14-original/linux/tags "for BlueDBM "set csprg=/usr/bin/cscope "set csto=0 "set cst "cs add ~/Desktop/bdbm_ocssd/cscope.out "set csverb "set tags=~/Desktop/bdbm_ocssd/tags "for H4H "set csprg=/usr/bin/cscope "set csto=0 "set cst "cs add ~/Dropbox/프로젝트/Huawei/H4H_FTL/cscope.out "set csverb "set tags=~/Dropbox/프로젝트/Huawei/H4H_FTL/tags "for fio set csprg=/usr/bin/cscope set csto=0 set cst cs add ~/Desktop/fio/fio/cscope.out set csverb set tags=~/Desktop/fio/fio/tags set number "显示行号 set nowrap "不换行 set shiftwidth=4 "默认缩进4个空格 set softtabstop=4 "使用tab时 tab空格数 set tabstop=4 "tab代表4个空格 set laststatus=2 "总是显示状态行 #backspace键 " indent 删除自动缩进的值 " eol 删除上一行行末尾的回车,两行合并 " start 除了刚输入的,还删除原来的字符 set backspace=indent,eol,start set expandtab "使用空格替换tab set autoindent "自动缩进 colorscheme evening "颜色模式 syn on "语法高亮 filetype on "文件类型 set encoding=utf-8 ”编码为utf8

以及生成cscope.out和tags文件的脚本:

#!/bin/sh rm -rf cscope.files cscope.files find `pwd` \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.s' -o -name '*.S' \) -print > cscope.files cscope -i cscope.files "额外多添加一行:ctags -R "用于生成tags标签

需要解释的是find 后面的pwd符号为`  不是   '

并且如果有不清楚怎么使用cscope命令的,就在vi中输入:help cscope显示帮助 :cs find c 函数名  (意思是查找调用本函数的函数) 而仅仅改变c还有:s查找search的意思找函数名等出现的地方。g查找函数或者宏定义的位置。 d查找本函数调用的函数。t查找指定字符串  e相当于egrep但是查找速度比较快。f查找并打开文件后面跟的是文件名  i查找包含该文本的文件。

而对于生成的标签tags使用有什么不熟悉的就使用 :help ctags  同样是在vi中输入的。:tag XXX是显示本文件内的函数或者结构。

每次一个新的工程要使用就先运行sh  mkcscope.sh后再讲.vimrc文件的配置给修改下即可。

进一步的更酷炫的界面显示:例如链接https://www.cnblogs.com/itech/archive/2012/03/23/2414145.html中有框的显示,则是使用了不同的插件,例如taglist插件。

再说怎么在vim中使用cscope的,同样,vi中支持8种cscope的查询方法

s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能d: 查找本函数调用的函数c: 查找调用本函数的函数t: 查找指定的字符串e: 查找egrep模式,相当于egrep功能,但查找速度快多了f: 查找并打开文件,类似vim的find功能i: 查找包含本文件的文件

安装ctags同样使用sudo apt-get install ctags

总结:

首先cscope ctags软件本身只要安装了就行。使用是在vim中使用,vi也可以。  但是需要在打开vi/vim前配置,.vimrc这个是每个工程都要做的,就像sourceinsight 还要新建工程这样,起到建立索引的作用。而.vimrc中配置命令除了常用的set number  set indent之外 还有配置每个工程的内容,而这些命令例如:set tags=xxxx路径/tags        cs add ~/xxx/cscope.out

可以看出需要这两个文件,这两个文件就是在工程最上方调用cscope ctags两个软件生成的,每次生成太麻烦,因此就制作了一个mkcscope.sh脚本来生成。

并且为了更好的显示使用taglist这个插件要好。目前来说ctags只有一个ctrl+] ctrl+t这两个在定义中的来回,而没有cscope的看c谁引用了之类,或者d自身引用了谁之类以及g的本定义是什么。taglist才有左边显示内容。

安装方法:

http://www.cnblogs.com/caosiyang/archive/2011/12/23/2299190.html

必须下载安装包才能安装。上述链接特别好,不仅讲了安装,并且给出了自己的.vimrc讲解配置。而解压zip在linux下使用

unzip -O cp936 xxx.zip  没有指定解压后的文件路径而已

主要是在.vimrc中添加四句话:

" " taglist " let Tlist_Show_One_File=1 "只显示当前文件的tags let Tlist_WinWidth=40 "设置taglist宽度 let Tlist_Exit_OnlyWindow=1 "tagList窗口是最后一个窗口,则退出Vim let Tlist_Use_Right_Window=1 "在Vim窗口右侧显示taglist窗口

使用taglist将其视为专门切割出来的部分即可。同样可以使用ctrl+w+ hjkl四个健跳转。然后跳到哪个框上面,就显示的是那个文件的taglist,而taglist框最终只有一个,想退出同样输入Tlist即可。启动仍然是Tlist。而如果在taglist中只想看实际内容不想跳,那么使其光标在目的名字上然后按空格键即可。不使用回车,回车是一定跳转了。

下面一步需要一个文件浏览器即可file explorer.   先下载安装一个WinManager插件plugin.

这个部分像taglist一样,是插件实现的。最终结果就是将问价浏览器与taglist结合起来使用。但是原作者敲入let g 时候g与t之间没有空格,语法出错了。

在vim吧吧主很厉害,回答了一个file explorer 与buffer explorer一起用的。

http://tieba.baidu.com/p/3251937024?red_tag=p2789503411

vim 的buffer功能特别有效,因为在空闲模式下输入q:或者q/都可以开辟一个buffer然后显示命令记录。使用ctrl+c退出命令buffer,然后自己可以抄前面已经输入过的命令。

vim buffer:先下载

然后目的是当打开的文件很多的时候,buffer很多的时候,可以有个索引然后就可以打开不同的buffer不用不知道自己有没有buffer或者不知道buffer有多少个。

使用buffer也可以的,是一样想选择使用tab或者ctrl+tab键的,必须先将光标跳过去,而怎么才能跳过去呢,就是一样的当成buffer区域,与切割屏幕一样使用的命令。使用ctags+taglist+winmanager+cscope+minibufferexplorer

总结.vimrc的语法,其实关于管理,自己目前能理解的是

map <F4> :WMToggle<cr>                     "nmap wm :WMToggle<cr>如果是这种就是输入wm调用wm管理器。而自己写的使用的是F4快捷键来使用的。

 let g:winManagerWindowLayout = "BufExplorer,FileExplorer|TagList"

 let g:winManagerWidth = 40

上述是将三个框的排列方式列出来,bufexplorer  fileexplorer在一起的,公用一个窗口,而taglist专用一个窗口。

此时三个窗口想完全退出使用qall命令,但是仅仅想退出显示框,就使用F 4就可以,打开后想关闭,就使用F 4就关闭。是奇数次和偶数次的区别。

最后注意一个问题,就是因为打开了winmanage+Tlist就表明默认会多打开一个buffer框,所以退出的时候以后记得使用qall命令吧,或者wqall解释如下:

 用winmanager时,FileExplorer窗口经常会自动变小,有时甚至会被Taglist窗口压缩得看不见。可以通过如下设置解决:

   设置taglistbuffer的最高限制:

   letg:bufExplorerMaxHeight=30

   如果有minibuffer插件还需要设置:

   letg:miniBufExplorerMoreThanOne=0

   这个设置保证在打开0个以上的文件是最高限制都是有用的,如果不加就会出现打开一个文件的时候Filexplorer再次变小,当打开多个文件的时候再次变大。

   将winmanager打开设为快捷方式,添加到.vimrc 如下配置

  nmap wm :WMToggle<cr>

  map <silent> <F2> :WMToggle<cr>

http://blog.sina.com.cn/s/blog_628571e60101bouq.html

可能的问题:

1、

如果遇到duplicate database

信息如下 line   42: E568: duplicate cscope database not added Press ENTER or type command to continue 那么就是vim的全局配置中也有cscope add cscope.out 和cscope_maps.vim或者用户的vim配置文件中的cscope add cscope.out冲突了 解决方法: a.you can adding this line "set nocscopeverbose " to your ~/.vimrc file as well. (我是采用了这种方法) b.To fix this issue, you will need to simply edit the file "~/.vim/plugin/cscopemenu.vim" (or whatever your plugin is named) and edit the line :  set cscopeverbose  https://blogs.oracle.com/natarajan/entry/avoiding_duplicate_cscope_database_error
转载请注明原文地址: https://www.6miu.com/read-2299956.html

最新回复(0)