<h4>1.自定义编辑.vimrc的快捷键</h4>
<blockquote>"Set mapleaderlet mapleader = ",""Fast reloading of the .vimrcmap <silent> <leader>ss :source ~/.vimrc<cr>"Fast editing of .vimrcmap <silent> <leader>ee :e ~/.vimrc<cr>"When .vimrc is edited, reload itautocmd! bufwritepost .vimrc source ~/.vimrc </blockquote><h4>2.ctags的应用:</h4><blockquote>ctags -R srcctrl-]
ctrl-t</blockquote>
<h4>3.taglist.vim 插件:</h4>现在我们到<a class="link" href="http://www.vim.org/scripts/script.php?script_id=273" target="_top">http://www.vim.org/scripts/script.php?script_id=273</a>下载最新版本的taglist plugin,目前版本是4.6。下载后,把该文件在~/.vim/目录中解压缩,这会在你的~/.vim/plugin和~/.vim/doc目录中各放入一个文件:
Taglist提供了相当多的功能,我的vimrc中这样配置:
<blockquote>"""""""""""""""""""""""""""""" Tag list (ctags)" """"""""""""""""""""""""""""""let Tlist_Ctags_Cmd = '/usr/bin/ctags'" "不同时显示多个文件的tag,只显示当前文件的let Tlist_Show_One_File = 1" "如果taglist窗口是最后一个窗口,则退出vimlet Tlist_Exit_OnlyWindow = 1"在右侧窗口中显示taglist窗口let Tlist_Use_Right_Window = 1</blockquote>这样配置后,当你输入”<span class="command"><strong>:TlistOpen</strong></span>“时, 右边显示函数或者变量的定义列表。可以用”:<span class="command"><strong>TlistOpen</strong></span>“打开taglist窗口,用”<span class="command"><strong>:TlistClose</strong></span>“关闭taglist窗口。或者使用”<span class="command"><strong>:TlistToggle</strong></span>“在打开和关闭间切换。在我的vimrc中定义了下面的映射,使用<F9>键就可以打开/关闭taglist窗口:
<blockquote>map <silent> <F9> :TlistToggle<cr> </blockquote><h4>4.<span class="bold"><strong>winmanager插件</strong></span>:</h4>Winmanager插件在这里下载:<a class="link" href="http://vim.sourceforge.net/scripts/script.php?script_id=95" target="_blank">http://vim.sourceforge.net/scripts/script.php?script_id=95</a>下载后,把该文件在~/.vim/目录中解压缩,这会把winmanager插件解压到~/.vim/plugin和~/.vim/doc目录中:
<blockquote>plugin/winmanager.vim – winmanager插件plugin/winfileexplorer.vim - 改良的Explorer插件plugin/wintagexplorer.vim – winmanager提供的tag插件,用处不大doc/winmanager.txt – 帮助文件 </blockquote>仍然用”<span class="command"><strong>:helptags ~/.vim/doc</strong></span>“命令来生成帮助标签,然后就可以使用”<span class="command"><strong>:help winmanager</strong></span>“来查看帮助了。使用winmanager插件可以控制各插件在vim窗口中的布局显示。我的vimrc中这样设置:
<blockquote>""""""""""""""""""""""""""""""" winManager setting" """"""""""""""""""""""""""""""let g:winManagerWindowLayout = "BufExplorer,FileExplorer|TagList"let g:winManagerWidth = 30let g:defaultExplorer = 0nmap <C-W><C-F> :FirstExplorerWindow<cr>nmap <C-W><C-B> :BottomExplorerWindow<cr>nmap <silent> <leader>wm :WMToggle<cr></blockquote><span class="emphasis"><em>g:winManagerWindowLayout</em></span>变量的值定义winmanager的窗口布局,使用上面的设置,我们的窗口布局看起来是这样的:左边有两个窗口,上面的是BufExplorer窗口,下面是taglist窗口。FileExplorer窗口和BufExplorer共用一个窗口,在BufExplorer窗口中使用”<span class="command"><strong>CTRL-N</strong></span>“可以切换到FileExplorer窗口,再使用一次则又切换回BufExplorer窗口。也就是说,在变量g:winManagerWindowLayout中,使用”,”分隔的插件,在同一个窗口中显示,使用”<span class="command"><strong>CTRL-N</strong></span>“在不同插件间切换;使用”|”分隔的插件,则在另外一个窗口中显示。
在屏幕右边的窗口则是主编辑区。
在上面的vimrc设置中,还定义了三个键映射,分别用于跳到左上窗口、左下窗口,以及显示/关闭winmanager窗口。
<h4>5.lookupfile 插件</h4>Lookupfile插件可以在下面的链接下载:<a class="link" href="http://www.vim.org/scripts/script.php?script_id=1581" target="_blank">http://www.vim.org/scripts/script.php?script_id=1581</a>下载该插件后,把它解压到你的~/.vim目录中,就完成了安装。然后在vim中执行”<span class="command"><strong>:helptags ~/.vim/doc</strong></span>“命令,生成help文件索引,然后就可以使用”<span class="command"><strong>:help lookupfile</strong></span>“命令查看lookupfile插件的帮助文件了。
<span class="bold"><strong>注:</strong></span>windows用户需要把这个插件解压在你的$vim/vimfiles或$HOME/vimfiles目录。
Lookupfile插件还需要最新的genutils支持,因此,需要下载genutils:<a class="link" href="http://www.vim.org/scripts/script.php?script_id=197" target="_blank">http://www.vim.org/scripts/script.php?script_id=197</a>
这个插件提供了一些通用的函数,可供其它的脚本使用。它的安装方法也是在~/.vim目录解压就可以了。需要注意的是,最新版本的genutils使用了 新的自动加载方式,所以和以前的版本不兼容。如果你的其它插件需要使用genutils的旧版本的话,你需要参照genutils的说明进行配置,以便使 新旧两个版本能协同工作。
现在我们介绍lookupfile插件。虽然名字为lookupfile,其实这个插件它不仅能用来查找文件,还可以在打开的缓冲区中查找,按目录查找,等等。
<span class="bold"><strong>[项目文件查找]</strong></span>
Lookupfile在查找文件时,需要使用tag文件。它可以使用<span class="command"><strong>ctags</strong></span>命令生成的tag文件,不过查找效率会比较低。因此我们会专门为它生成一个包含项目中所有文件名的tag文件。
我编写了下面的shell脚本,为vim70的源代码,生成一个文件名tag文件。
<pre lang="bash" escaped="true">#!/bin/sh# generate tag file for lookupfile pluginecho -e "!_TAG_FILE_SORTED\t2\t/2=foldcase/" > filenametagsfind . -not -regex '.*\.\(png\|gif\)' -type f -printf "%f\t%p\t1\n" | \ sort -f >> filenametags</pre>在~/src/vim70/目录下运行该脚本,会生成一个名为filenametags的文件,包含了vim70目录下的所有文件的名字及其所在目录。现在我们需要让lookupfile插件知道到哪去找文件名tag文件。我们假定vim当前工作目录为~/src/vim70/,执行下面的命令:
<blockquote>:let g:LookupFile_TagExpr = '"./filenametags"' </blockquote><span class="blod">注:</span>如果不设定<span class="emphasis"><em>g:LookupFile_TagExpr</em></span>的值,那么lookupfile插件会以tags选项定义的文件作为它的tag文件。现在我们就可以使用lookupfile来打开文件了,按”<span class="command"><strong><F5></strong></span>“或输入”<span class="command"><strong>:LookupFile</strong></span>“在当前窗口上方打开一个lookupfile小窗口,开始输入文件名(至少4个字符),随着你的输入,符合条件的文件就列在下拉列表中了。文件名可以使用vim的正则表达式,这大大方便了文件的查找。你可以用”<span class="command"><strong>CTRL-N</strong></span>“和”<span class="command"><strong>CTRL-P</strong></span>“(或者用上、下光标键)来在下拉列表中选择你所需的文件。选中文件后,按回车,就可以在之前的窗口中打开此文件。
Lookupfile插件提供了一些配置选项,通过调整这些配置选项,使它更符合你的工作习惯。下面是我的vimrc中关于lookupfile的设置,供参考:
<pre lang="php" escaped="true">""""""""""""""""""""""""""""""" winManager setting" """"""""""""""""""""""""""""""let g:winManagerWindowLayout = "BufExplorer,FileExplorer|TagList"let g:winManagerWidth = 30let g:defaultExplorer = 0nmap <C-W><C-F> :FirstExplorerWindow<cr>nmap <C-W><C-B> :BottomExplorerWindow<cr>nmap <silent> <leader>wm :WMToggle<cr>""""""""""""""""""""""""""""""
" lookupfile setting" """"""""""""""""""""""""""""""let g:LookupFile_MinPatLength = 1 "最少输入1个字符才开始查找let g:LookupFile_PreserveLastPattern = 0 "不保存上次查找的字符串let g:LookupFile_PreservePatternHistory = 1 "保存查找历史let g:LookupFile_AlwaysAcceptFirst = 1 "回车打开第一个匹配项目let g:LookupFile_AllowNewFiles = 0 "不允许创建不存在的文件if filereadable("./filenametags") "设置tag文件的名字let g:LookupFile_TagExpr = '"./filenametags"'endif"映射LookupFile为,lknmap <silent> <leader>lk :LUTags<cr>"映射LUBufs为,llnmap <silent> <leader>ll :LUBufs<cr>"映射LUWalk为,lwnmap <silent> <leader>lw :LUWalk<cr> " lookup file with ignore casefunction! LookupFile_IgnoreCaseFunc(pattern)let _tags = &tagstrylet &tags = eval(g:LookupFile_TagExpr)let newpattern = '\c' . a:patternlet tags = taglist(newpattern)catchechohl ErrorMsg | echo "Exception: "" . v:exception | echohl NONEreturn ""finallylet &tags = _tagsendtry" Show the matches for what is typed so far.
let files = map(tags, 'v:val["filename"]')return filesendfunctionlet g:LookupFile_LookupFunc = 'LookupFile_IgnoreCaseFunc'</pre><h4>5.开启文件类型检测:</h4>打开文件类型检测功能很简单,在你的vimrc中加入下面一句话就可以了:<blockquote>filetype plugin indent on </blockquote><h4>6.语法高亮:</h4>http://www.vim.org/scripts/script.php?script_id=625 下载color主题<h4>7.cscope利器:</h4><blockquote>cscope -Rbq<div class="itemizedlist"><ul type="disc"> <li><span class="bold"><strong>-R</strong></span>: 在生成索引文件时,搜索子目录树中的代码</li> <li><span class="bold"><strong>-b</strong></span>: 只生成索引文件,不进入cscope的界面</li> <li><span class="bold"><strong>-q</strong></span>: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度</li> <li><span class="bold"><strong>-k</strong></span>: 在生成索引文件时,不搜索/usr/include目录</li> <li><span class="bold"><strong>-i</strong></span>: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用”<span class="bold"><strong>–</strong></span>“,表示由标准输入获得文件列表。</li> <li><span class="bold"><strong>-I</strong></span><span class="emphasis"><em>dir</em></span>: 在<span class="bold"><strong>-I</strong></span>选项指出的目录中查找头文件</li> <li><span class="bold"><strong>-u</strong></span>: 扫描所有文件,重新生成交叉索引文件</li> <li><span class="bold"><strong>-C</strong></span>: 在搜索时忽略大小写</li> <li><span class="bold"><strong>-P</strong></span><span class="emphasis"><em>path</em></span>: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。</li></ul></div></blockquote>cscope查询功能:<blockquote><div class="itemizedlist"><ul type="disc"> <li><span class="bold"><strong>s:</strong></span> 查找C语言符号,即查找函数名、宏、枚举值等出现的地方</li> <li><span class="bold"><strong>g:</strong></span> 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能</li> <li><span class="bold"><strong>d:</strong></span> 查找本函数调用的函数</li> <li><span class="bold"><strong>c:</strong></span> 查找调用本函数的函数</li> <li><span class="bold"><strong>t:</strong></span> 查找指定的字符串</li> <li><span class="bold"><strong>e:</strong></span> 查找egrep模式,相当于egrep功能,但查找速度快多了</li> <li><span class="bold"><strong>f:</strong></span> 查找并打开文件,类似vim的find功能</li> <li><span class="bold"><strong>i:</strong></span> 查找包含本文件的文件</li></ul></div></blockquote>