tags文件是由ctags程序产生的一个索引文件, ctags程序其是叫"Exuberant Ctags", 是Unix上面ctags程序的替代品, 并且比它功能强大, 是大多数Linux发行 版 上默认的ctags程序. 那么tags文件是做什么用的呢? 如果你在读程序时看了一个函数调用, 或者一个变量, 或者一个宏等等, 你想知道它们的定义在哪儿, 怎么办呢? 用grep? 那会搜出很多不相干的地方. 现在流行用是的<C-]>, 谁用谁知道呀, 当光标在某个函数或变量上时, 按下"Ctrl+]", 光标会自动跳转到其定义处, 够厉害吧, 你不用再羡慕Visual Studio的程序员了, 开始羡慕我吧~_~. --- 摘自吴垠的博客在windows下,该软件同样可以使用,具体步骤如下:
- 将ec57w32.zip解压,在解压后文件夹中找到ctags.exe,将其复制到C:\ProgramFiles\Vim\vim73\tools下(Note:要将该路径加入系统环境变量PATH中,不然,系统不认识),并编辑_vimrc文件,添加以下内容:
set tags=tags;
set autochdir
打开cmd命令行,切换到你要查看的源代码的根目录处,运行
ctags -R
将会在此目录处生成一个tags文件。
用gvim打开一个代码文件,将光标放到某一函数名上,如下图的UpdateViewByPosNo(),按下"ctrl+]",光标会自动跳转到定义处。 按下"ctrl+T"会跳回到原来的位置。变量、结构体、宏等等,都可以这样做。当你的源文件有更新时,只能重新运行ctags -R命令,来更新tags文件。快捷键:CTRL + ]------ 光标跳到定义处CTRL + T----- 光标跳回原来的位置
"taglist"TlistUpdate可以更新tagsmap <F3> :silent! Tlist<CR> "按下F3就可以呼出了let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行let Tlist_Use_Right_Window=0 "让窗口显示在右边,0的话就是显示在左边let Tlist_Show_One_File=1 "让taglist可以同时展示多个文件的函数列表,如果想只有1个,设置为1let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏let Tlist_Exit_OnlyWindow=0 "当taglist是最后一个分割窗口时,自动推出vimlet Tlist_Process_File_Always=0 "不是一直实时更新tags,因为没有必要let Tlist_Inc_Winwidth=0"winmangerlet g:winManagerWindowLayout='FileExplorer|TagList'nmap wm :WMToggle<cr>快捷键:F3------ 代替Tlistwm----- 打开FileExplorer和Taglist窗口
首先,我们还是了解一下什么是cscope。简单来讲,cscope主要用来协助浏览C/C++语言,他的功能要强大于ctags,不仅支持变量/函数的定义查询,还记录了函数的调用处查询等功能,所以也有说法称cscope的诞生就是为了取代ctags。无论这个说法是否有据可依,对使用方来说,当然是希望功能越强大方便越好啦,所以这也是我们为什么讲ctags和cscope都装上的原因啦。第二,我们来说一下vim的支持。cscope没有ctags那么幸运,cscope在大部分的linux下的vim中是没有提供支持的(但是在windows下的gvim都提供了支持),所以,如果你打算要在linux下面使用vim+cscope,那么1,你要下载安装cscope。2,你要重新编译vim,加上支持选项:
--enable-cscope
当然,cscope也提供了windows版(否则windows下gvim怎么和cscope搭配嘛……),分别下载地址如下:
cscope(linux):http://cscope.sourceforge.net/
cscope(windows):http://sourceforge.net/projects/mslk/files/当然,安装的最后一步就是,不要忘记讲cscope放进的环境变量里!
在vimrc中配置如下:
"==============================================================================================================
"CScope plug-in"=============================================================================================================="let g:CODEPATH="D://vim_library//cscope_home""cs add D:/vim_library/cscope_home/cscope.outif(has("win32") || has("win95") || has("win64") || has("win16")) "Judge the OS typelet g:iswindows=1elselet g:iswindows=0endifmap <C-F12> :call Do_CsTag()<CR>nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<CR>nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR>nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>function Do_CsTag()let dir = getcwd()if filereadable("tags")if(g:iswindows==1)let tagsdeleted=delete(dir."\\"."tags")elselet tagsdeleted=delete("./"."tags")endifif(tagsdeleted!=0)echohl WarningMsg | echo "Fail to do tags! I cannot delete the tags" | echohl Nonereturnendifendifif has("cscope")silent! execute "cs kill -1"endifif filereadable("cscope.files")if(g:iswindows==1)let csfilesdeleted=delete(dir."\\"."cscope.files")elselet csfilesdeleted=delete("./"."cscope.files")endifif(csfilesdeleted!=0)echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.files" | echohl Nonereturnendifendifif filereadable("cscope.out")if(g:iswindows==1)let csoutdeleted=delete(dir."\\"."cscope.out")elselet csoutdeleted=delete("./"."cscope.out")endifif(csoutdeleted!=0)echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.out" | echohl Nonereturnendifendifif(executable('ctags'))"silent! execute "!ctags -R --c-types=+p --fields=+S *"silent! execute "!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ."endifif(executable('cscope') && has("cscope") )if(g:iswindows!=1)silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' -o -name '*.py' -o -name '*.pyw' -o -name '*.php'> cscope.files"elsesilent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs,*.py,*.php >> cscope.files"endifsilent! execute "!cscope -b"execute "normal :"if filereadable("cscope.out")execute "cs add cscope.out"endifendifendfunction"solution the confliction between ctags and cscopeif has("cscope")set cscopequickfix=s-,c-,d-,i-,t-,e-set csto=0set cstset csverbendif看到亮点了吗,如上所配置,注意红色的标注,按CTRL+F12就可以生成,tags,cscope.files,cscope.out了,然后在按ctrl+shift+2(表示@)+S,g等等来找各种定义了。cscope的主要功能是通过同的子命令"find"来实现的
"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 查找包含本文件的文件
启用Grep,在工程中查找
Grep是linux中命令,如果你不熟悉可以看Grep的文档。
下载安装Grep for windows
下载Vim的Grep插件,grep.vim放在plugin目录
配置_vimrc,设置ctrl+F1为快捷键
"=============================================================================================================="Grep: Find the files in the project files"=============================================================================================================="Grep plugin settingsnnoremap <silent> <C-F1> :Grep<CR>
在编程的时候不可能永远只编辑一个文件, 你肯定会打开很多源文件进行编辑, 如果每个文件都打开一个vim进行编辑的话那操作起来将是多麻烦啊, 所以vim有buffer(缓冲区)的概念, 可以看vim的帮助:
:help buffer
vim自带的buffer管理工具只有:ls, :bnext, :bdelete 等的命令, 既不好用, 又不直观. 现在隆重向你推荐一款vim插件(plugin): MiniBufExplorer
使用方法:
重新启动vim, 当你只编辑一个buffer的时候 MiniBufExplorer派不上用场, 当你打开第二个buffer的时候, MiniBufExplorer窗口就自动弹出来了, 见下图:
(--- 图13 ---)
上面那个狭长的窗口就是MiniBufExplorer窗口, 其中列出了当前所有已经打开的buffer, 当你把光标置于这个窗口时, 有下面几个快捷键可以用:
<Tab> 向前循环切换到每个buffer名上 <S-Tab> 向后循环切换到每个buffer名上 <Enter> 在打开光标所在的buffer d 删除光标所在的buffer
以下的两个功能需要在~/.vimrc中增加:
let g:miniBufExplMapCTabSwitchBufs = 1
<C-Tab> 向前循环切换到每个buffer上,并在但前窗口打开 <C-S-Tab> 向后循环切换到每个buffer上,并在但前窗口打开
如果在~/.vimrc中设置了下面这句:
则可以用<C-h,j,k,l>切换到上下左右的窗口中去,就像:
let g:miniBufExplMapWindowNavVim = 1
C-w,h j k l 向"左,下,上,右"切换窗口.
在~/.vimrc中设置:
是用<C-箭头键>切换到上下左右窗口中去
let g:miniBufExplMapWindowNavArrows = 1 "=============================================================================================================="minibuffer plugin"==============================================================================================================let g:miniBufExplMapCTabSwitchBufs = 1let g:miniBufExplMapWindowNavVim = 1let g:miniBufExplMapWindowNavArrows = 1
下载c.vim插件,并解压到vimfiles中,不用做任何设置,注意只要有filetype plugin on在vimrc文件中
安装mingw,用c.vim中快捷键,进行编译,运行
解压omicppcomplete到vimfiles文件夹中,并在vimrc进行如下设置:" OmniCppCompletelet OmniCpp_NamespaceSearch = 1let OmniCpp_GlobalScopeSearch = 1let OmniCpp_ShowAccess = 1let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表let OmniCpp_MayCompleteDot = 1 " 输入 . 后自动补全let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]" 自动关闭补全窗口au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endifset completeopt=menuone,menu,longest这样,在插入模式编辑 C/C++ 源文件时按下.
或->
或::
,或者手动按下 Ctrl+X Ctrl+O 后就会弹出自动补全窗口,此时可以用 Ctrl+N 和 Ctrl+P 上下移动光标进行选择。
直接可以:A,打开.cpp和.h对应的文件,:AV,打开.cpp和.h对应的文件,并且分屏。
启用VimPdb,可以调试Python程序。
下载VimPdb,解压后拷贝VimPdb.py,VimPdb.vim到plugin即可。
用vim代开python代码文件,按F5运行,然后按F2设置断点,在运行到断点后可以用按F12可以查看Stack Trace,F3查看变量和参数值。
更高级的使用可以查看文档。
- Highlighting of currently debugged line and breakpoint lines.
- F5 - Run/continue running.
- F2 - Toggle breakpoint at current line
- Ctrl-F2 / Shift-F2 - Toggle conditional/temporary breakpoint.
- F7 / F8 - Step into/over
- F12 - Print stack trace
- F3 / Ctrl-F3 - Eval/Exec a given statement (in the current debugging context)
- Save/load breakpoints into session files.
- Cross-platform
- CTRL+D---直接运行程序
启用ropevim ,重构Python程序
下载rope,ropemode,ropevim,分别解压缩,打开控制台,cd到解压缩目录,执行python setup.py install安装。
然后拷贝ropevim.vim文件到plugin目录。这样就安装好了。我们试试重构一个类名,光标放在类名上,按Ctrl-c 然后连按两下r。
可以看到quickfix窗体要求你输入New name:,输入新的名称回车,再回车,重构就完成了。如下图
Python代码检查
在Vim的ftplugin目录下新建一个python目录。
下载pyflakes,解压缩后把pyflakes.vim文件和pyflakes目录拷贝套ftplugin\python目录中。
打开一个有问题的python源代码文件,执行命令:cc,即可进行代码检查,如下图中找到了两处错误。
6.Perl IDE 设置
1. Download the perl-support plug-in: http://www.vim.org/scripts/script.php?script_id=5562. unzip it and copy them to vimfiles.3. using the perl