<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    CONAN ZONE

    你越掙扎我就越興奮

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      0 Posts :: 282 Stories :: 0 Comments :: 0 Trackbacks

    本節(jié)所用命令的幫助入口:


    :help lookupfile

    前面我們講過(guò)通過(guò)”:find”命令打開(kāi)指定的文件,不過(guò)使用”:find”命令并不是非常的方便:一是如果項(xiàng)目比較大、文件比較多,find查找起來(lái)很慢;二是必須輸入全部的文件名,不能使用正規(guī)表達(dá)式查找。

    我們也介紹過(guò)VIM提供的文件瀏覽插件,你可以在瀏覽器中根據(jù)目錄去查找,但這種方式在瀏覽目錄時(shí)比較方便,查找一個(gè)已知名字(或知道部分名字)的文件效率就比較低了。

    相比之下,在source insight中查找文件非常簡(jiǎn)單,只要輸入部分的文件名,就可以找到符合條件的文件。

    我一直被這個(gè)問(wèn)題所困擾,直到有一天,在www.vim.org上發(fā)現(xiàn)了一個(gè)非常出色的插件,才徹底解決了查找文件效率低下的問(wèn)題,它的功能毫不遜于source insight。在給該插件投票時(shí),我選擇了“Life Changing”。是的,它改變了我的生活!

    這個(gè)插件的名字是:lookupfile!

    Lookupfile插件可以在下面的鏈接下載:

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

    它使用VIM 7.0提供的插入模式下的下拉菜單補(bǔ)全功能,因此只能在VIM 7.0及以上版本中使用。

    下載該插件后,把它解壓到你的~/.vim目錄中,就完成了安裝。然后在VIM中執(zhí)行”:helptags ~/.vim/doc”命令,生成help文件索引,然后就可以使用”:help lookupfile”命令查看lookupfile插件的幫助文件了。

    注:windows用戶需要把這個(gè)插件解壓在你的$VIM/vimfiles或$HOME/vimfiles目錄。

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

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

    這個(gè)插件提供了一些通用的函數(shù),可供其它的腳本使用。它的安裝方法也是在~/.vim目錄解壓就可以了。需要注意的是,最新版本的genutils使用了新的自動(dòng)加載方式,所以和以前的版本不兼容。如果你的其它插件需要使用genutils的舊版本的話,你需要參照genutils的說(shuō)明進(jìn)行配置,以便使新舊兩個(gè)版本能協(xié)同工作。

    現(xiàn)在我們介紹lookupfile插件。雖然名字為lookupfile,其實(shí)這個(gè)插件它不僅能用來(lái)查找文件,還可以在打開(kāi)的緩沖區(qū)中查找,按目錄查找,等等。

    [項(xiàng)目文件查找]

    Lookupfile在查找文件時(shí),需要使用tag文件。它可以使用前面文章中提到的使用“ctags”命令生成的tag文件,不過(guò)查找效率會(huì)比較低。因此我們會(huì)專門為它生成一個(gè)包含項(xiàng)目中所有文件名的tag文件。

    我編寫了下面的shell腳本,為vim70的源代碼,生成一個(gè)文件名tag文件。


    #!/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

    回想一下我們?cè)?#8220;使用tag文件和taglist插件 (一)”一文中介紹的tag文件的格式。再對(duì)照腳本命令來(lái)看:

    - echo命令用來(lái)生成filenametags文件中的“!_TAG_FILE_SORTED”行,表明此tag文件是經(jīng)過(guò)排序的。

    - find命令用來(lái)查找所有類型為普通文件,文件后綴名不是.png和.gif的文件,找到的文件按“文件名\t文件路徑\t1”的格式輸出出來(lái)。

    - sort命令則把find命令的輸出重新排序,然后寫入filenametags文件中

    在~/src/vim70/目錄下運(yùn)行該腳本,會(huì)生成一個(gè)名為filenametags的文件,包含了vim70目錄下的所有文件的名字及其所在目錄。

    現(xiàn)在我們需要讓lookupfile插件知道到哪去找文件名tag文件。我們假定VIM當(dāng)前工作目錄為~/src/vim70/,執(zhí)行下面的命令:


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

    注:如果不設(shè)定g:LookupFile_TagExpr的值,那么lookupfile插件會(huì)以tags選項(xiàng)定義的文件作為它的tag文件。

    現(xiàn)在我們就可以使用lookupfile來(lái)打開(kāi)文件了,按“<F5>”或輸入“: LookupFile”在當(dāng)前窗口上方打開(kāi)一個(gè)lookupfile小窗口,開(kāi)始輸入文件名(至少4個(gè)字符),隨著你的輸入,符合條件的文件就列在下拉列表中了。文件名可以使用VIM的正則表達(dá)式,這大大方便了文件的查找。你可以用“CTRL-N”和“CTRL-P”(或者用上、下光標(biāo)鍵)來(lái)在下拉列表中選擇你所需的文件。選中文件后,按回車,就可以前一個(gè)窗口中打開(kāi)此文件。

    下圖是使用lookupfile插件查找文件的一個(gè)例子:


    在屏幕最上方的窗口就是lookupfile窗口,在這個(gè)窗口中輸入“gui.*x11”幾個(gè)字符,查找到6個(gè)匹配文件,使用CTRL-N選中g(shù)ui_x11.c文件,然后按回車,就會(huì)在前一個(gè)窗口中打開(kāi)src/gui_x11.c文件,lookupfile窗口也自動(dòng)關(guān)閉了。是不是非常方便?

    [緩沖區(qū)查找]

    在開(kāi)發(fā)過(guò)程中,我經(jīng)常會(huì)同時(shí)打開(kāi)數(shù)十甚至上百個(gè)文件。即使是使用BufExplorer插件,想在這么多buffer中切換到自己所要的文件,也不是件容易的事。

    Lookupfile插件提供了一個(gè)按緩沖區(qū)名字查找緩沖區(qū)的方式,只要輸入緩沖區(qū)的名字(可以是正則表達(dá)式),它就可以把匹配的緩沖區(qū)列在下拉列表中,同時(shí)還會(huì)列出該緩沖區(qū)內(nèi)文件的路徑,當(dāng)你的buffer中有多個(gè)同名文件時(shí),這可以幫你迅速找到你想要的文件。

    使用“:LUBufs”命令開(kāi)始在緩沖區(qū)中查找,輸入緩沖區(qū)的名字,在你輸入的過(guò)程中,符合條件的緩沖區(qū)就顯示在下拉列表中了,選中所需緩沖區(qū)后,按回車,就會(huì)切換你所選的緩沖區(qū)。下圖是一個(gè)示例:


    [瀏覽目錄](méi)

    Lookupfile插件還提供了目錄瀏覽的功能,使用“:LUWalk”打開(kāi)lookupfile窗口后,就可以輸入目錄,lookupfile會(huì)在下拉列表中列出這個(gè)目錄中的所有子目錄及文件供選擇,如果選擇了目錄,就會(huì)顯示這個(gè)目錄下的子目錄和文件;如果選擇了文件,就在VIM中打開(kāi)這個(gè)文件。

    下圖是使用LUWalk的一個(gè)抓圖:


    Lookupfile插件還提供了LUPath和LUArgs兩個(gè)功能,這兩個(gè)功能我用的不多,就不在這里介紹了。感興趣的朋友讀一下lookupfile的幫助頁(yè)。

    [Lookupfile配置]

    Lookupfile插件提供了一些配置選項(xiàng),通過(guò)調(diào)整這些配置選項(xiàng),使它更符合你的工作習(xí)慣。下面是我的vimrc中關(guān)于lookupfile的設(shè)置,供參考:


    """"""""""""""""""""""""""""""
    " lookupfile setting
    """"""""""""""""""""""""""""""
    let g:LookupFile_MinPatLength = 2               "最少輸入2個(gè)字符才開(kāi)始查找
    let g:LookupFile_PreserveLastPattern = 0        "不保存上次查找的字符串
    let g:LookupFile_PreservePatternHistory = 1     "保存查找歷史
    let g:LookupFile_AlwaysAcceptFirst = 1          "回車打開(kāi)第一個(gè)匹配項(xiàng)目
    let g:LookupFile_AllowNewFiles = 0              "不允許創(chuàng)建不存在的文件
    if filereadable("./filenametags")                "設(shè)置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

    有了上面的定義,當(dāng)我輸入”,lk”時(shí),就會(huì)在tag文件中查找指定的文件名;當(dāng)輸入”,ll”時(shí),就會(huì)在當(dāng)前已打開(kāi)的buffer中查找指定名字的buffer;當(dāng)輸入”,lw”時(shí),就會(huì)在指定目錄結(jié)構(gòu)中查找。

    另外,我還在項(xiàng)目相關(guān)的配置文件vim70sx.vim(參考本系列第4篇文章)中加入了lookupfile所使用的tag文件的信息:


    let g:LookupFile_TagExpr = '"filenametags"'

    這樣,在恢復(fù)前次會(huì)話時(shí)就給lookupfile插件定義了tag文件。

    在用lookupfile插件查找文件時(shí),是區(qū)分文件名的大小寫的,如果想進(jìn)行忽略大小寫的匹配,可以使用VIM忽略大小寫的正則表達(dá)式,即在文件名的前面加上“\c”字符。舉個(gè)例子,當(dāng)你輸入“\cab.c”時(shí),你可能會(huì)得到“ab.c”、“Ab.c”、“AB.c”……。

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

    通常情況下我都進(jìn)行忽略大小寫的查找,每次都輸入“\c”很麻煩。沒(méi)關(guān)系,lookupfile插件提供了擴(kuò)展功能,把下面這段代碼加入你的vimrc中,就可以每次在查找文件時(shí)都忽略大小寫查找了:


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

    有時(shí)在LUBufs時(shí)也需要忽略緩沖區(qū)名字的大小寫,我是通過(guò)直接修改lookupfile插件的方法,在LUBufs查找的字符串前都加上“\c”,使之忽略大小寫。如果你不想這樣,可以每次在緩沖區(qū)名字前手動(dòng)加上“\c”。

    本文關(guān)于Lookupfile插件就介紹這么多,請(qǐng)閱讀幫助頁(yè)獲取更多的信息。

    這是一個(gè)非常好的插件,希望能為更多人喜愛(ài)!

    也歡迎大家多交流使用中的心得和疑問(wèn)。

    來(lái)自:http://blog.csdn.net/easwy/archive/2007/03/12/1527228.aspx

    posted on 2009-04-08 21:48 CONAN 閱讀(229) 評(píng)論(0)  編輯  收藏 所屬分類: VIM
    主站蜘蛛池模板: GOGOGO高清免费看韩国| 黄色免费网站网址| 亚洲欧洲国产精品你懂的| 国产又黄又爽又猛免费app| 精品国产亚洲第一区二区三区| 亚洲午夜无码片在线观看影院猛| 黄色网址在线免费| 77777午夜亚洲| 日本大片在线看黄a∨免费| 国产亚洲综合成人91精品 | 亚洲精品国产高清在线观看| 亚洲av手机在线观看| 三年片在线观看免费观看大全动漫| 亚洲中文字幕无码一去台湾| 亚洲精品动漫人成3d在线| 99久久免费观看| 免费无码又爽又黄又刺激网站| 亚洲视频一区二区在线观看| 久久久久亚洲AV无码专区网站| 成人福利免费视频| 成年免费a级毛片免费看无码| 亚洲最大福利视频| 亚洲国产精品自在在线观看| 爽爽日本在线视频免费| 99久久免费精品视频| 久久久免费观成人影院| 亚洲精品9999久久久久无码| 亚洲日本一区二区| 久久久久亚洲AV成人网人人软件| 啦啦啦中文在线观看电视剧免费版| 国产一精品一AV一免费| 一级A毛片免费观看久久精品 | 亚洲综合一区国产精品| 国产精品亚洲一区二区三区| 亚洲AV色香蕉一区二区| 四虎永久在线免费观看| 永久免费av无码网站韩国毛片| 久久免费视频观看| 一级毛片试看60分钟免费播放| 亚洲国产精品网站在线播放| 亚洲一区无码中文字幕乱码|