vi/vim使用進階: lookupfile外掛
本節所用命令的幫助入口:
:help lookupfile
在文章儲存專案相關配置中,我們講過通過”:find“命令開啟指定的檔案,不過使用”:find“命令並不是非常的方便:一是如果專案比較大、檔案比較多,find查詢起來很慢;二是必須輸入全部的檔名,不能使用正則表示式(regex)查詢。
我們也介紹過vim提供的檔案瀏覽外掛,你可以在瀏覽器中根據目錄去查詢,但這種方式在瀏覽目錄時比較方便,查詢一個已知名字(或知道部分名字)的檔案效率就比較低了。
相比之下,在source insight中查詢檔案非常簡單,只要輸入部分的檔名,就可以找到符合條件的檔案。
我一直被這個問題所困擾,直到有一天,在
這個外掛的名字是: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: 功能更強大點,可以搜尋到函式的呼叫可被呼叫的情況。但是在一