1. 程式人生 > >vi/vim使用進階: lookupfile外掛

vi/vim使用進階: lookupfile外掛

本節所用命令的幫助入口:

:help lookupfile

在文章儲存專案相關配置中,我們講過通過”:find“命令開啟指定的檔案,不過使用”:find“命令並不是非常的方便:一是如果專案比較大、檔案比較多,find查詢起來很慢;二是必須輸入全部的檔名,不能使用正則表示式(regex)查詢。

我們也介紹過vim提供的檔案瀏覽外掛,你可以在瀏覽器中根據目錄去查詢,但這種方式在瀏覽目錄時比較方便,查詢一個已知名字(或知道部分名字)的檔案效率就比較低了。

相比之下,在source insight中查詢檔案非常簡單,只要輸入部分的檔名,就可以找到符合條件的檔案。

我一直被這個問題所困擾,直到有一天,在

http://www.vim.org/上發現了一個非常出色的外掛,才徹底解決了查詢檔案效率低下的問題,它的功能毫不遜於source insight。在給該外掛投票時,我選擇了”Life Changing“。是的,它改變了我的生活!

這個外掛的名字是:lookupfile

它使用vim 7.0中插入模式下的下拉選單補全功能,因此只能在vim 7.0及以上版本中使用。

下載該外掛後,把它解壓到你的~/.vim目錄中,就完成了安裝。然後在vim中執行”:helptags ~/.vim/doc“命令,生成help檔案索引,然後就可以使用”:help lookupfile“命令檢視lookupfile外掛的幫助檔案了。

注:windows使用者需要把這個外掛解壓在你的$vim/vimfiles或$HOME/vimfiles目錄。

這個外掛提供了一些通用的函式,可供其它的指令碼使用。它的安裝方法也是在~/.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\t2\t/2=foldcase/" > filenametags
find . -not -regex '.*\.\(png\|gif\)' -type f -printf "%f\t%p\t1\n" | \
    sort -f >> filenametags 

or:

#!/bin/sh
# generate tag file for lookupfile plugin
echo -e "!_TAG_FILE_SORTED\t2\t/2=foldcase/" > filenametags
find `pwd` -path `pwd`/.git -prune -o -not -regex '.*\.\(png\|gif\)' -type f -printf "%f\t%p\t1\n" | \
        sort -f >> filenametags 

or

$echo '!_TAG_FILE_SORTED    2    /2=foldcase/' >tagfile 
$find `pwd` -type f \( -name "*.[ch]"  -o -name "*.[ch]pp" \) -printf "%f\t%p\t1\n"|sort -f >>tagfile 



回想一下我們在”使用標籤(tag)檔案“一文中介紹的tag檔案的格式。再對照指令碼命令來看:

  • echo命令用來生成filenametags檔案中的”!_TAG_FILE_SORTED”行,表明此tag檔案是經過排序的。
  • find命令用來查詢所有型別為普通檔案,檔案字尾名不是.png和.gif的檔案,找到的檔案按”檔名\t檔案路徑\t1″的格式輸出出來。
  • 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外掛查詢檔案的一個例子:

在螢幕最上方的視窗就是lookupfile視窗,在這個視窗中輸入”gui.*x11″幾個字元,查詢到6個匹配檔案,使用CTRL-N選中gui_x11.c檔案,然後按回車,就會在前一個vim視窗中開啟src/gui_x11.c檔案,lookupfile視窗也自動關閉了。是不是非常方便?!

[緩衝區查詢]

在開發過程中,我經常會同時開啟數十甚至上百個檔案。即使是使用BufExplorer外掛,想在這麼多buffer中切換到自己所要的檔案,也不是件容易的事。

Lookupfile外掛提供了一個按緩衝區名字查詢緩衝區的方式,只要輸入緩衝區的名字(可以是正則表示式),它就可以把匹配的緩衝區列在下拉列表中,同時還會列出該緩衝區內檔案的路徑,當你的buffer中有多個同名檔案時,這可以幫你迅速找到你想要的檔案。

使用”:LUBufs“命令開始在緩衝區中查詢,輸入緩衝區的名字,在你輸入的過程中,符合條件的緩衝區就顯示在下拉列表中了,選中所需緩衝區後,按回車,就會切換你所選的緩衝區。下圖是一個示例:

[瀏覽目錄]

Lookupfile外掛還提供了目錄瀏覽的功能,使用”:LUWalk“開啟lookupfile視窗後,就可以輸入目錄,lookupfile會在下拉列表中列出這個目錄中的所有子目錄及檔案供選擇,如果選擇了目錄,就會顯示這個目錄下的子目錄和檔案;如果選擇了檔案,就在vim中開啟這個檔案。

下圖是使用LUWalk的一個抓圖:

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
"對映LookupFile為,lk
nmap <silent> <leader>lk :LUTags<cr>
"對映LUBufs為,ll
nmap <silent> <leader>ll :LUBufs<cr>
"對映LUWalk為,lw
nmap <silent> <leader>lw :LUWalk<cr>

有了上面的定義,當我輸入”,lk“時,就會在tag檔案中查詢指定的檔名;當輸入”,ll“時,就會在當前已開啟的buffer中查詢指定名字的buffer;當輸入”,lw“時,就會在指定目錄結構中查詢。

另外,我還在專案相關的配置檔案vim70sx.vim(參考儲存專案相關配置)中加入了lookupfile所使用的tag檔案的資訊:

" lookup file tag file
let g:LookupFile_TagExpr = '"filenametags"' 

這樣,在恢復前次會話時就給lookupfile外掛定義了tag檔案。

在用lookupfile外掛查詢檔案時,是區分檔名的大小寫的,如果想進行忽略大小寫的匹配,可以使用vim忽略大小寫的正則表示式,即在檔名的前面加上”\c”字元。舉個例子,當你輸入”\cab.c”時,你可能會得到”ab.c”、”Ab.c”、”AB.c”…

注:如果想加快lookupfile忽略大小寫查詢的速度,在生成檔名tag檔案時,使用混合大小寫排序。這在文章使用標籤(tag)檔案有所提及。

通常情況下我都進行忽略大小寫的查詢,每次都輸入”\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外掛就介紹這麼多,請閱讀手冊獲取更多的資訊。

這是一個非常好的外掛,希望能為更多人喜愛!

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

[參考文件]

相關推薦

vi/vim使用: lookupfile外掛

本節所用命令的幫助入口: :help lookupfile 在文章儲存專案相關配置中,我們講過通過”:find“命令開啟指定的檔案,不過使用”:find“命令並不是非常的方便:一是如果專案比較大、檔案比較多,find查詢起來很慢;二是必須輸入全部的檔名,不能使用正則表

vim用法

一.多檔案常用 1. Ctrl + 6:切換檔案 2.進入vim時分屏:     垂直:vim file1 file2 -O / On     水平:vim file1 file2 -o / on 3.vim內分屏   &nb

Flutter—平臺外掛

這篇文章我們會學習Flutter應用程式如何與iOS和Android裝置上可用的平臺特定程式碼整合,這包括裝置API,(比如url_launcher和battery)和第三方平臺SDK(比如Firebase)。 使用現有的平臺外掛 Flutter外掛是一

vim ctags cscope lookupfile外掛(包括如何自動生成索引tag、自動查詢索引tag)

  好長時間沒有上來更新了, 今天趁老闆不再上來休閒一下. 本章要說的是和vim的tags相關的內容. 之所以在跳轉之後就說明tags是因為這個功能相當的重要和實用. 好的東西自然是需要提前分享的.   首先, 要說的是關於vim使用ctags, cscope的相關教程

vim使用

標定 保存 光標 快速 插入 path 打開 不能 插入模式 1)命令行模式:鍵入的內容被解釋為命令。 2)插入模式:鍵入的內容被插入文件。 3)可視模式:通過鍵盤選擇、剪切、復制文本。 4)Ex 模式:使用更多命令(例如:存

Vue 系列(二)之外掛原理及實現

Vue進階系列彙總如下,歡迎閱讀,歡迎加群討論(文末)。 Vue 進階系列(一)之響應式原理及實現 Vue 進階系列(二)之外掛原理及實現 使用方法 外掛的詳細使用方法詳情看Vue官網 Vue官網之外掛Plugins 概括出來就是 1、通過Vue.use(MyPlugin)使用,

java程式設計師菜鳥(十六)linux基礎入門(四)linux下VIM文字編輯器使用

  linux下編寫配置檔案最好的編輯工具莫過於vim了。Vim的功能實在太多太全,Vim的很多功能也許我們很少用得到,真正為大家常用的功能可能只佔到所有功能的冰山一角。Vim終歸只是一個編寫程式碼或編輯文件的工具,所以只要掌握一些足夠我們使用的功能即可。 做個廣告

AngularJS(二十二)實現時間選擇外掛

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

idea 外掛的使用 篇(個人收集使用中的)

idea 外掛的使用 進階篇(個人收集使用中的)  恭喜你,如果你已經看到這篇文章,證明在idear使用上已經初有小成!那麼就要向著大神進發了!  下邊就是大神之路!  外掛的設定  在 IntelliJ IDEA 的安裝講解中我們其實已經知道,Intelli

idea 外掛的使用

轉自https://blog.csdn.net/sunny243788557/article/details/52325444 idea 外掛的使用 進階篇(個人收集使用中的)  恭喜你,如果你已經看到這篇文章,證明在idear使用上已經初有小成!那麼就要向著大神進發了! 

IntelliJ IDEA的外掛使用三( idea的記憶體修改)

IntelliJ IDEA 修改記憶體大小,使得idea執行更流暢,我們初始的idea的記憶體大小如下圖: 說明: 1.Xms128m,最小記憶體 2.Xmx750m,最大記憶體 3.預留程式碼快取的大小 4.UseConcMarkSweepGC,設定年老代為併發收集 修改的地方,就修改這

IntelliJ IDEA的外掛使用二( idea的破解)

我們在使用idea的時候都是需要進行破解的,不然過一段時間idea就會提示使用已過期,下面我們就講解一下idea使用jar包進行破解的詳細步驟。 idea破解步驟: 第一步:我們需要下載版本對應的破解jar包,我的idea版本是IntelliJ IDEA 2018.2,我下載的是Jetb

IntelliJ IDEA的外掛使用一( Lombok)

當我們使用idea的時候,有很多註解的使用能大大的減少我們的程式碼量,使我們的程式碼看起來更加的簡潔清晰,方便了我們程式設計師的程式碼開發,在idea中就有一個Lombok的外掛,其有很多我們不知道的註解使用,下面我們就來具體的看一下如何的使用Lombok。 首先我們需要安裝Lombok

AngularJS 二十二 實現時間選擇外掛

JS實現時間選擇外掛 引導語       在專案開發過程中,需要實現根據以日期為篩選條件之一,故需要實現時間選擇外掛。對於未接觸的新事物,自己總是感覺不明覺厲。其實,有些實現可以使用很簡單的方法即可。以此為例,偶然的一次翻看課本發現HTML5中已經設計到此種實現。其

Webpack第六節---外掛(plugins)

外掛(Plugins)是用來拓展Webpack功能的,它們會在整個構建過程中生效,執行相關的任務。Loders和Plugins常常被弄混,但是他們其實是完全不同的東西,可以這麼來說,Loders是在打包構建過程中用來處理原始檔的(JSX,Scss,Less),一次處理一個,外

史上最全Vim快捷鍵鍵點陣圖(入門到

作者:盧鈞軼(cenalulu) 來自:http://cenalulu.github.io/linux/all-vim-cheatsheat/ 經典版 下面這個鍵點陣圖應該是大家最常看見的經典版了。 對應的簡體中文版 其實經典版是一系列

Linux高手必懂的Vim命令大全

命令歷史 以:和/開頭的命令都有歷史紀錄,可以首先鍵入:或/然後按上下箭頭來選擇某個歷史命令。 啟動vim 在命令列視窗中輸入以下命令即可 vim 直接啟動vim vim filename 開啟vim並建立名為filename的檔案 檔案命令 開啟單個檔案 v

Jenkins外掛開發篇之擴充套件外掛功能

之前寫過一篇文章是關於如何開發jenkins外掛,主要講述了開發jenkins外掛時需要準備的環境,如何新建一個jenkins外掛工程,以及對工程專案目錄結構的解析。本文是jenkins外掛開發的進階篇,主要講述如何擴充套件jenkins外掛的功能。如下圖所示:(1)Job任

Vue 教程之:Axios配置JWT/封裝外掛/傳送表單資料

小編推薦:Fundebug專注於JavaScript、微信小程式、微信小遊戲,Node.js和Java實時BUG監控。真的是一個很好用的bug監控費服務,眾多大佬公司都在使用。 尤雨溪之前在微博釋出訊息,不再繼續維護 vue-resource,並推薦大家開始使用 Axios,本文就

vim程式碼 cscope & ctags 簡單上手

現在我也是小白,剛入門這是一些簡單的用法,更多高階用法,快捷鍵這些暫時沒測試,先能用起來再說吧。 先說一下這兩個軟體的特點 ctags: 可以搜尋到一些函式,變數的定義位置,並且可以快速的跳入跳出,非常方便。 cscope: 功能更強大點,可以搜尋到函式的呼叫可被呼叫的情況。但是在一