lookupfile.vim插件详解

系列文章汇总:《使用VIM开发软件项目

本节所用命令的帮助入口:

:help lookupfile

前面我们讲过通过”:find”命令打开指定的文件,不过使用”:find”命令并不是非常的方便:一是如果项目比较大、文件比较多,find查找起来很慢;二是必须输入全部的文件名,不能使用正规表达式查找。

我们也介绍过VIM提供的文件浏览插件,你可以在浏览器中根据目录去查找,但这种方式在浏览目录时比较方便,查找一个已知名字(或知道部分名字)的文件效率就比较低了。

相比之下,在source insight中查找文件非常简单,只要输入部分的文件名,就可以找到符合条件的文件。

我一直被这个问题所困扰,直到有一天,在www.vim.org上发现了一个非常出色的插件,才彻底解决了查找文件效率低下的问题,它的功能毫不逊于source insight。在给该插件投票时,我选择了“Life Changing”。是的,它改变了我的生活!

这个插件的名字是:lookupfile!

Lookupfile插件可以在下面的链接下载:

http://www.vim.org/scripts/script.php?script_id=1581

它使用VIM 7.0提供的插入模式下的下拉菜单补全功能,因此只能在VIM 7.0及以上版本中使用。

下载该插件后,把它解压到你的~/.vim目录中,就完成了安装。然后在VIM中执行”:helptags ~/.vim/doc”命令,生成help文件索引,然后就可以使用”:help lookupfile”命令查看lookupfile插件的帮助文件了。

注:windows用户需要把这个插件解压在你的$VIM/vimfiles或$HOME/vimfiles目录。

Lookupfile插件还需要最新的genutils支持,因此,需要下载genutils:

http://www.vim.org/scripts/script.php?script_id=197

这个插件提供了一些通用的函数,可供其它的脚本使用。它的安装方法也是在~/.vim目录解压就可以了。需要注意的是,最新版本的genutils使用了新的自动加载方式,所以和以前的版本不兼容。如果你的其它插件需要使用genutils的旧版本的话,你需要参照genutils的说明进行配置,以便使新旧两个版本能协同工作。

现在我们介绍lookupfile插件。虽然名字为lookupfile,其实这个插件它不仅能用来查找文件,还可以在打开的缓冲区中查找,按目录查找,等等。

[项目文件查找]

Lookupfile在查找文件时,需要使用tag文件。它可以使用前面文章中提到的使用“ctags”命令生成的tag文件,不过查找效率会比较低。因此我们会专门为它生成一个包含项目中所有文件名的tag文件。

我编写了下面的shell脚本,为vim70的源代码,生成一个文件名tag文件。

#!/bin/sh

# generate tag file for lookupfile plugin
echo -e "!_TAG_FILE_SORTED 2 /2=foldcase/" > filenametags
find . -not -regex ".*.(png|gif)" -type f -printf "%f %p 1 " |
sort -f >> filenametags

回想一下我们在“使用tag文件和taglist插件 (一)”一文中介绍的tag文件的格式。再对照脚本命令来看:

- echo命令用来生成filenametags文件中的“!_TAG_FILE_SORTED”行,表明此tag文件是经过排序的。

- find命令用来查找所有类型为普通文件,文件后缀名不是.png和.gif的文件,找到的文件按“文件名 文件路径 1”的格式输出出来。

- sort命令则把find命令的输出重新排序,然后写入filenametags文件中

在~/src/vim70/目录下运行该脚本,会生成一个名为filenametags的文件,包含了vim70目录下的所有文件的名字及其所在目录。

现在我们需要让lookupfile插件知道到哪去找文件名tag文件。我们假定VIM当前工作目录为~/src/vim70/,执行下面的命令:

:let g:LookupFile_TagExpr = ""./filenametags""

注:如果不设定g:LookupFile_TagExpr的值,那么lookupfile插件会以tags选项定义的文件作为它的tag文件。

现在我们就可以使用lookupfile来打开文件了,按“<F5>”或输入“: LookupFile”在当前窗口上方打开一个lookupfile小窗口,开始输入文件名(至少4个字符),随着你的输入,符合条件的文件就列在下拉列表中了。文件名可以使用VIM的正则表达式,这大大方便了文件的查找。你可以用“CTRL-N”和“CTRL-P”(或者用上、下光标键)来在下拉列表中选择你所需的文件。选中文件后,按回车,就可以前一个窗口中打开此文件。

下图是使用lookupfile插件查找文件的一个例子:

使用VIM开发软件项目7:lookupfile插件

在屏幕最上方的窗口就是lookupfile窗口,在这个窗口中输入“gui.*x11”几个字符,查找到6个匹配文件,使用CTRL-N选中gui_x11.c文件,然后按回车,就会在前一个窗口中打开src/gui_x11.c文件,lookupfile窗口也自动关闭了。是不是非常方便?

[缓冲区查找]

在开发过程中,我经常会同时打开数十甚至上百个文件。即使是使用BufExplorer插件,想在这么多buffer中切换到自己所要的文件,也不是件容易的事。

Lookupfile插件提供了一个按缓冲区名字查找缓冲区的方式,只要输入缓冲区的名字(可以是正则表达式),它就可以把匹配的缓冲区列在下拉列表中,同时还会列出该缓冲区内文件的路径,当你的buffer中有多个同名文件时,这可以帮你迅速找到你想要的文件。

使用“:LUBufs”命令开始在缓冲区中查找,输入缓冲区的名字,在你输入的过程中,符合条件的缓冲区就显示在下拉列表中了,选中所需缓冲区后,按回车,就会切换你所选的缓冲区。下图是一个示例:

使用VIM开发软件项目7:lookupfile插件

[浏览目录]

Lookupfile插件还提供了目录浏览的功能,使用“:LUWalk”打开lookupfile窗口后,就可以输入目录,lookupfile会在下拉列表中列出这个目录中的所有子目录及文件供选择,如果选择了目录,就会显示这个目录下的子目录和文件;如果选择了文件,就在VIM中打开这个文件。

下图是使用LUWalk的一个抓图:

使用VIM开发软件项目7:lookupfile插件

Lookupfile插件还提供了LUPath和LUArgs两个功能,这两个功能我用的不多,就不在这里介绍了。感兴趣的朋友读一下lookupfile的帮助页。

[Lookupfile配置]

Lookupfile插件提供了一些配置选项,通过调整这些配置选项,使它更符合你的工作习惯。下面是我的vimrc中关于lookupfile的设置,供参考:

""""""""""""""""""""""""""""""
" lookupfile setting
""""""""""""""""""""""""""""""
let g:LookupFile_MinPatLength = 2 "最少输入2个字符才开始查找
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
nmap <silent> <leader>lk <Plug>LookupFile<cr> "映射LookupFile为,lk
nmap <silent> <leader>ll :LUBufs<cr> "映射LUBufs为,ll
nmap <silent> <leader>lw :LUWalk<cr> "映射LUWalk为,lw

有了上面的定义,当我输入”,lk”时,就会在tag文件中查找指定的文件名;当输入”,ll”时,就会在当前已打开的buffer中查找指定名字的buffer;当输入”,lw”时,就会在指定目录结构中查找。

另外,我还在项目相关的配置文件vim70sx.vim(参考本系列第4篇文章)中加入了lookupfile所使用的tag文件的信息:

let g:LookupFile_TagExpr = ""filenametags""

这样,在恢复前次会话时就给lookupfile插件定义了tag文件。

在用lookupfile插件查找文件时,是区分文件名的大小写的,如果想进行忽略大小写的匹配,可以使用VIM忽略大小写的正则表达式,即在文件名的前面加上“c”字符。举个例子,当你输入“cab.c”时,你可能会得到“ab.c”、“Ab.c”、“AB.c”……。

注:如果想加快lookupfile忽略大小写查找的速度,在生成文件名tag文件时,使用混合大小写排序。这在本系列的第5篇文章中有所提及。

通常情况下我都进行忽略大小写的查找,每次都输入“c”很麻烦。没关系,lookupfile插件提供了扩展功能,把下面这段代码加入你的vimrc中,就可以每次在查找文件时都忽略大小写查找了:

" 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"

有时在LUBufs时也需要忽略缓冲区名字的大小写,我是通过直接修改lookupfile插件的方法,在LUBufs查找的字符串前都加上“c”,使之忽略大小写。如果你不想这样,可以每次在缓冲区名字前手动加上“c”。

本文关于Lookupfile插件就介绍这么多,请阅读帮助页获取更多的信息。

这是一个非常好的插件,希望能为更多人喜爱!

也欢迎大家多交流使用中的心得和疑问。

来自:http://blog.csdn.net/easwy/archive/2007/03/12/1527228.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文主要介绍: vim的使用技巧、 vim的配置及vimrc、 vim的命令和vim插件。 内容极其详细,且用doc文档编写,整理得整齐、美观。 [目录] vim使用进阶: 序言 本文是本系列的序言,讲述我使用vim的经历和心得,以及对vim初学者的一些建议。文中的抓图展示了我的vim使用环境。 vim使用进阶: 使用会话和viminfo 本文介绍如何使用vim的会话 (session) 和viminfo来恢复vim的使用环境。如果你需要经常恢复到相同工作环境,此功能非常有用,你不必一次次重新打开文件、设置你的工作环境。 vim使用进阶: vimrc初步 本文简要介绍了vimrc的知识以及如何使用vimrc保存vim的配置。文中还提供了一些键映射(map),使用这些映射可以快速编辑和加载vimrc。关于vimrc的更多应用,参见本系列其它文章。 vim使用进阶: 保存项目相关配置 本篇主要以path选项为例,讲述如何保存和恢复项目相关的配置。在使用vim的过程中,你可能同时打开几个project,每个project的配置可能都不相同,文中介绍了两种方法来保存每个project自身的独有配置。一种是使用一个固定的vim配置脚本保存project相关的path设置、按键映射等;另外一种是利用前面文章所介绍的会话(session)机制。 vim使用进阶: 使用标签(tag)文件 本文介绍了如何使用Exuberant ctags生成tag文件以及在vim中如何使用tag文件进行跳转、查找等操作。还简要介绍了tag文件的格式,在后面介绍的Lookupfile插件中,会利用tag文件便捷的查找、打开文件。 vim使用进阶: 使用taglist插件 本文介绍如何使用taglist插件(plugin)来查看程序中的标签(tag),并介绍了taglist插件的配置和用法。taglist插件利用Exuberant ctags程序生成标签文件,并提供像Source Insight那样的标签窗口,可以方便的跳转到函数、变量等标签所在的位置。 vim使用进阶: 文件浏览和缓冲区浏览 本节介绍了如何在vim中浏览文件,以及如何查看当前打开的缓冲区。利用netrw插件,可以方便的在vim中浏览各个目录、打开指定文件,而不用切换到文件浏览器或shell;当然,netrw插件的作用并不仅仅局限于此。利用bufexplorer插件,则可以方便的查看打开的缓冲区(buffer),在缓冲区间进行切换。本文的最后介绍了winmanager插件,使用这个插件,可以把netrw插件、bufexplorer插件和taglist插件整合起来,使vim看起来更像一个集成开发环境(IDE)。 vim使用进阶: lookupfile插件 如果你在开发一个大的项目,当你想在一大堆文件中查找或者编辑指定文件时,Lookupfile插件是必不可少的。使用它,可以快速查找项目文件、可以在缓冲区查找指定文件、可以浏览指定目录等。在查找时甚至可以使用正则表达式(regex),在你只记得部分文件名或目录名时,这可是救命的手段。 vim使用进阶: 开启文件类型检测 vim最吸引人的一点是,它支持无穷多的文件类型,而且能够随意扩展。在本文主要介绍如何打开文件类型检测的功能,以及如何使用基于文件类型的插件(filetype plugin)。正因为有了文件类型检测的功能,我们才可能针对不同的类型的文件,定义不同的键映射(map)、设置不同的选项,进行语法高亮的染色(后续文章中介绍)…你可以实现任意你想实现的功能。 vim使用进阶: 乱花渐欲迷人眼 - 语法高亮 VIM并不是只有黑色两色。正相反,它提供了非常灵活的机制允许用户自定义色彩。运行在终端中的VIM,由于终端本身的限制,只能使用若干种固定的颜色;但对于GVIM来讲,你可以根据你的喜好调出任意的颜色。本文介绍的,正是vim的语法高亮功能。 vim使用进阶: 程序员的利器 - cscope 在前面的文章中介绍了利用ctags生成的tag文件,跳转到标签定义的地方。但如果想查找函数在哪里被调用,或者标签在哪些地方出现过,ctags就无能为力了,这时需要使用更为强大的cscope。本文就介绍如何使用cscope,有了它,你可以把source insight抛到一边去了。 vim使用进阶: 剑不离手 - quickfix vim由一个程序员开发,并且为更多的程序员所使用,所以vim对开发人员的强大支持,也就可以理解了。quickfix模式的引入就是一个例子。quickfix模式,是一种加速你开发的工作方式,使你不必离开vim,就可以快速的完成”编辑-编译-修正”你的程序。它不仅仅对开发人员有用,只要你的工作有类似”编辑-编译-修正”的过程,它就可以极大的简化你的工作。 vim使用进阶: 智能补全 使用过Source Insight的人一定对它的自动补全功能印象深刻,在很多的集成开发环境中,也都支持自动补全。vim做为一个出色的编辑器,这样的功能当然少不了。本文主要介绍vim的OMNI补全。将在下一篇中介绍其它的补全方式。 vim使用进阶: 自动补全 本文继续介绍vim的补全功能。作为一个通用的编辑器,vim实现的补全功能并不仅仅限于对程序的补全,它可以对文件名补全、根据字典进行补全、根据本缓冲区或其它缓冲区类似的内容进行补全、根据文件语法补全等等,它甚至允许用户自己编写函数来实现定制的补全。本文简要介绍了这些补全的方法。 vim使用进阶: 指随意动,移动如飞 (一) VIM提供的移动方式多如牛毛,但我们并不需要掌握全部这些命令,只需要掌握最适合自己的那些命令。本文介绍了最常用的一些移动命令,在下篇文章中将介绍更高级的移动方法。 vim使用进阶: 指随意动,移动如飞 (二) 本文介绍如何在vim中移动,主要涉及如何使用跳转表(jump-motions)、使用标记(mark)、使用折行(fold),以及如何在程序中移动。 vim使用进阶: 在VIM中使用GDB调试 本文介绍了如何使用vimgdb补丁在vim中用gdb调试程序,同时还介绍了vim的编译方法。然而,vim只是一个编辑器,而不是一个集成开发环境(IDE),所以它对调试的支持很有限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值