<h4>1.自定义编辑.vimrc的快捷键</h4>
<blockquote>
"Set mapleader
let mapleader = ","
"Fast reloading of the .vimrc
map <silent> <leader>ss :source ~/.vimrc<cr>
"Fast editing of .vimrc
map <silent> <leader>ee :e ~/.vimrc<cr>
"When .vimrc is edited, reload it
autocmd! bufwritepost .vimrc source ~/.vimrc
</blockquote>
<h4>2.ctags的应用:</h4>
<blockquote>ctags -R src
ctrl-]
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窗口是最后一个窗口,则退出vim
let 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 = 30
let g:defaultExplorer = 0
nmap <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 plugin
echo -e "!_TAG_FILE_SORTED\t2\t/2=foldcase/" > filenametags
find . -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 = 30
let g:defaultExplorer = 0
nmap <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为,lk
nmap <silent> <leader>lk :LUTags<cr>
"映射LUBufs为,ll
nmap <silent> <leader>ll :LUBufs<cr>
"映射LUWalk为,lw
nmap <silent> <leader>lw :LUWalk<cr>
" lookup file with ignore case
function! LookupFile_IgnoreCaseFunc(pattern)
let _tags = &tags
try
let &tags = eval(g:LookupFile_TagExpr)
let newpattern = '\c' . a:pattern
let tags = taglist(newpattern)
catch
echohl ErrorMsg | echo "Exception: "" . v:exception | echohl NONE
return ""
finally
let &tags = _tags
endtry
" Show the matches for what is typed so far.
let files = map(tags, 'v:val["filename"]')
return files
endfunction
let 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>