lookupfile.五星级的插件

lookupfile.vim是Vim的一个五星级的插件,它允许用户只输入部分文件名甚至使用正 则表达式快速查找并打开目标文件,尤其对于程序员来说,lookupfile的作用绝对称得上“Life changing”。

lookupfile支持多种查找方式,大体分为三种,即在Buffer中查找、在指定路径下查找和在Tags文件中查找。其中,最使 lookupfile熠熠生辉的就是根据Tag文件查找和打开文件。

假设现有一个包含数百个源码文件的工程,首先使用某种手段或工具生成Vim兼容的Tags文件(稍后详述),然后打开Vim并使 lookupfile使用此Tags文件作为查找源。此后即可使用“:LookupFile”命令打开一个输入窗口, 输入部分文件名或一个正则表达式,则所有匹配项会显示在一个下拉列表中,最后选中任意匹配项即可快速打开该文件:

这种方式使Vim从浩如烟海的源码中查找和打开文件变得易如反掌,它意味着你不必再把时间浪费在NERDTree或 者简单的“:set wildmenu”+“:cd”,甚至邪恶的 “Windows Explorer”上;也不必再来回地切换窗口,甚至手都不需要离开键盘就把这一切搞定了。

lookupfile的安装方法如下:

  1. 下载lookupfile和genutils, 后者是lookupfile依赖的一个通用函数库。
  2. 解压这两个压缩包,并将得到的多个文件夹覆盖到Vim的运行时环境下,如Linux下为“~/.vim”,Windows下可为Vim安装目录下 的“vimfiles”目录。
  3. 进入Vim运行时环境下的“doc”目录,用Vim打开任一文件,输入命令“:helptags .”并回 车。

至此,lookupfile的安装已经完成。但要使用它提升工作效率,还需要做些额外的工作,毕竟你总不能每次都要到工程根目录下手动生成Tags 文件,再“:let g:LookupFile_TagExpr='"./filenametags"'”,然后每次 找文件的候还要“:LookupFile”!

首先就是Tags文件的生成,对于Linux用户,这个可以使用Shell脚本实现:

PLAIN TEXT
BASH:
  1. #!/bin/sh
  2. # generate tag file for lookupfile plugin
  3. echo -e "!_TAG_FILE_SORTED\t2\t/2=foldcase/" > filenametags
  4. find . -not -regex '.*\.\(png\|gif\)' -type f -printf "%f\t%p\t1\n" | sort -f >> filenametags

 

将此段Shell命令保存成名为“genfiletags”的文件并设置权限为“755”, 然后将“genfiletags”复制到环境变量“PATH”下的一个目录中(目 的是允许直接执行“genfiletags”而无须输入该文件的完整路径)。以后只需在工程根目录下执行“genfiletags”, 即可在该目录下生成名为“filenametags”的Tags文件。

而对于Windows用户,事情开始变得邪恶起来,批处理显 然很难胜任这在Linux下只需两行命令就轻松搞定的工作,所幸我安装了Cygwin并将其安装目录下的“bin” 目录添加到了环境变量“PATH”中,理论上上面的Shell脚本可以使用“bash genfiletags”执行,但是Windows偏偏东施效颦,也有“find”和“sort” 命令,所以我只好将Cygwin的“find.exe”和“sort.exe”各 复制一份,分别命名为“true_find.exe”和“true_sort.exe”, 并将上面的脚本改为:

PLAIN TEXT
BASH:
  1. #!/bin/sh
  2. # generate tag file for lookupfile plugin
  3. echo -e "!_TAG_FILE_SORTED\t2\t/2=foldcase/" > filenametags
  4. true_find . -not -regex '.*\.\(png\|gif\)' -type f -printf "%f\t%p\t1\n" | true_sort -f >> filenametags

 

然后保存为“genfiletags.sh”。另外创建一个批处理文件“genfiletags.bat”, 内容如下:

@echo off
bash genfiletags.sh

最后,将这两个文件复制到环境变量“PATH”包含的一个目录中。

到这里,lookupfile已经可以正常工作了,只需在Vim中cd到项目的根目录,然后使用“:!genfiletags” 命令生成Tags文件,最后使用命令“:let g:LookupFile_TagExpr='"./filenametags"'” 告诉lookupfile使用这个文件作为查找源,就可以使用“:LookupFile”命令查找和打开文件了。

但我希望效率更高一些,因此在Vim的配置文件中加入以下代码:

PLAIN TEXT
VIM:
  1. " 指定英文逗号作为<leader>键
  2. let mapleader= ","
  3.  
  4. " 在指定目录生成filenametags,并使lookupfile将这个文件作为查找源
  5. function SetRootOfTheProject (path )
  6.     " 进入指定目录
  7.    exe 'cd '.a:path
  8.    " 生成文件标签
  9.     exe '!genfiletags'
  10.     " 获取标签文件的路径
  11.    let tagFilePath = genutils#CleanupFileName(a:path.'/filenametags')
  12.    " 设置LookupFile插件的全局变量,使之以上面生成的标签文件作为查找源
  13.     exe "let g:LookupFile_TagExpr='\"" .tagFilePath . "\"'"
  14. endfunction
  15. " 设置当前位置为工程的根目录
  16. function SetHereTheRoot ( )
  17.     call SetRootOfTheProject ( '.' )
  18. endfunction
  19. nmap <leader >root : call SetHereTheRoot ( ) <CR >
  20. " 从用户的输入获取指定路径,并设置为工程的根目录
  21. function SetSpecifiedPathTheRoot ( )
  22.     call SetRootOfTheProject ( input ( '请输入工程根目录的路径:' ) )
  23. endfunction
  24. nmap <leader >xroot : call SetSpecifiedPathTheRoot ( ) <CR >
  25.  
  26. " 使用LookupFile打开文件
  27. nmap <leader >o :LookupFile <CR >

 

以后只需要在Vim中cd到项目的根目录并在常规模式下输入“,root” 即可完成从生成Tags文件到指定该文件作为LookupFile查找源的工作,然后每次在常规模式下输入“,o”即 可打开LookupFile窗口输入查询条件了。

下面是一些LookupFile常用的技巧:

  1. 每次打开LookupFile窗口时,会默认显示上一次的查询条件或上一次打开的文件的完整路径,可以使用“Ctrl+U” 快捷键清空
  2. 对于查询出来的匹配项,在Windows下可以使用上下方向箭头选择,但在Linux下不能这样做,可使用“Ctrl+N” 进行选择
  3. 回车会直接在当前Buffer中打开选中的匹配项,可以使用“Ctrl+O”在Split窗口中打开

LookupFile使写程序变得更加妙趣横生,它使文件的查询和打开也可以变得非常地高效和优雅,唯独Windows下那极端邪恶的黑窗口,像个 无法摆脱的梦魇,龇牙咧嘴地嘲笑着WinSlave们。

2009-07-03更新:

对于Windows用户,要特别注意的是,在将上面的genfiletags.sh脚本的内容复制到文本编辑器并保存时,一定要保存为Unix格式的文本 文件

一种方法为,使用Vim打开genfiletags.sh,使用命令“:set fileformat=unix”并 保存。

你可能感兴趣的:(职场,vim,休闲,lookupfile)