Chinaunix首页 | 论坛 | 博客
  • 博客访问: 495718
  • 博文数量: 80
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1916
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-11 22:01
个人简介

从事实时计算多年,熟悉jstorm/spark/flink/kafka/rocketMq, 热衷于开源,希望在这里和前辈们一起学习与分享,得到长足的进步!邮箱:hustfxj@gmail.com 我的githup地址是:https://github.com/hustfxj。欢迎和大家一起交流探讨问题。

文章分类

全部博文(80)

文章存档

2017年(11)

2015年(3)

2014年(33)

2013年(33)

分类: LINUX

2013-11-29 10:11:29

1           lookupfile.vim插件安装

lookupfile的安装方法如下:

?  下载lookupfilegenutils, 后者是lookupfile依赖的一个通用函数库。

?  解压这两个压缩包,并将得到的多个文件夹覆盖到Vim的运行时环境下,如Linux下为“~/.vim”,Windows下可为Vim安装目录下 的“vimfiles”目录。

?  进入Vim运行时环境下的“doc”目录,用Vim打开任一文件,输入命令“:helptags .”并回车。

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

2           脚本实现tag文件的生成

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

BASH:

#!/bin/sh

# generate tag file for lookupfile plugin

echo -e "!_TAG_FILE_SORTED\t2\t/2=foldcase/"> filenametags

find . -not -regex '.*\.\(png\|gif\)'  ! -path "*svn*" -type f -printf "%f\t%p\t1\n" | sort -f>> filenametags

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

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

3           tags生成到查找源快捷设置

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

VIM:

1. " 指定英文逗号作为

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 root :call SetHereTheRoot()

20. " 从用户的输入获取指定路径,并设置为工程的根目录

21. function SetSpecifiedPathTheRoot()

22.     call SetRootOfTheProject(input('请输入工程根目录的路径:'))

23. endfunction

24. nmap xroot :call SetSpecifiedPathTheRoot()

25.  

26. " 使用LookupFile打开文件

27. nmap o :LookupFile

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

4           lookupfile命令

?  每次打开LookupFile窗口时,会默认显示上一次的查询条件或上一次打开的文件的完整路径,可以使用“Ctrl+U” 快捷键清空

?  对于查询出来的匹配项,在Windows下可以使用上下方向箭头选择,但在Linux下不能这样做,可使用“Ctrl+N” 进行选择

?  回车会直接在当前Buffer中打开选中的匹配项,可以使用“Ctrl+O”在Split窗口中打开

?  提供了一下查找:

LookupFile  文件

LUWalk   目录

LUBufs  缓存

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

5           添加到vim配置文件

[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 lk LookupFile   "映射LookupFile为,lk
nmap ll :LUBufs            "映射LUBufs为,ll
nmap lw :LUWalk            "映射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”。

参考文献:

http://blog.163.com/lgh_2002/blog/static/44017526201061313442254/

阅读(4068) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~