国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

`Leaderf gtags`:模糊匹配與最強靜態符號索引工具的完美結合

hsluoyz / 1806人閱讀

摘要:也就是,是一個非常強大的源碼符號索引工具。韋大的中符號索引篇對有比較詳細的介紹,本文再做一些補充。的最新版本已經是,該版本了韋大文中提到的下面文件名大小寫的。

Gtags

Gtags也就是GNU GLOBAL,是一個非常強大的源碼符號索引工具。它通過建立索引數據庫,不但可以查找函數的定義,還可以查找函數的所有引用(被調用的地方);而且它還可以增量地更新索引數據庫,當代碼有所改變時,它可以在很短的時間內更新索引數據庫,保持索引數據庫和代碼同步。
韋大的 Vim 8 中 C/C++ 符號索引:GTags 篇 對 gtags 有比較詳細的介紹,本文再做一些補充。

GLOBAL-6.6.3 released

Gtags的最新版本已經是6.6.3,該版本 fix了韋大文中提到的 Windows下面文件名大小寫的 bug。

在 Linux上,不配置let $GTAGSCONF = "/path/to/share/gtags/gtags.conf"也可以正常工作。

當項目文件的路徑包含非ASCII字符時,使用pygments會報UnicodeEncodeError: "latin-1" codec can"t encode characters in position 5-8: ordinal not in range(256)

自動生成Gtags索引數據庫

LeaderF 可以自己管理 gtags 數據庫(GTAGS,GRTAGS,GPATH),它不會在你的項目目錄下生成任何額外的文件或目錄。gtags 數據庫文件存儲在$HOME/.LfCache/gtags/%PATH%OF%YOUR%PROJECT/下面, %PATH%OF%YOUR%PROJECT 是把你項目路徑中的 / 替換成 %
只要設置let g:Lf_GtagsAutoGenerate = 1, LeaderF 就會在打開第一個文件時自動生成 gtags 數據庫。當代碼有更改并且已經有 gtags 數據庫生成時,更改的代碼會自動同步到 gtags 數據庫(即使g:Lf_GtagsAutoGenerate是0)。
只有在項目根目錄下有g:Lf_RootMarkers(默認值是[".git", ".hg", ".svn"])里面指定的文件或目錄時,LeaderF 才會自動生成 gtags 數據庫;否則只能手動生成 gtags 數據庫:Leaderf gtags --update,但是當代碼有更改時,gtags 數據庫依然可以自動更新。

Leaderf gtags 使用介紹

具體使用方法可以用:Leaderf gtags -h來查看。

usage:
Leaderf[!] gtags [-h] [--remove] [--recall]
Leaderf[!] gtags --update [--gtagsconf ] [--gtagslabel 

注意:如果:Leaderf后面有感嘆號,會直接進入normal模式;如果沒有感嘆號,則是輸入模式,此時可以輸入字符來進行模糊匹配過濾。可以用tab鍵在兩個模式間來回切換。

手動生成gtags數據庫
Leaderf[!] gtags --update [--gtagsconf ] [--gtagslabel 

此命令完全異步,不會卡住你的UI。

--gtagsconf

用來指定 gtags.conf 文件的路徑,一般情況下不需要指定,默認值就可以很好地工作。對于Windows上,如果相對于gtags.exe所在路徑有../share/gtags/gtags.conf,也不需要指定該選項。如果需要用戶自己特有的針對 gtags 的配置,可以指定用戶的配置文件。

也可以在vimrc里設置g:Lf_Gtagsconf達到同樣的目的。

--gtagslabel

用來指定gtagslabel,如果不指定,默認值是 "default"是 gtags.conf 中的:

default
使用內置parser,只支持 6 種語言(C,C++,Java,PHP4,Yacc,匯編)。

ctags
使用exuberant-ctags作為語言parser,支持 40+ 種語言,只能生成定義索引不能生成引用索引。

new-ctags
使用universal-ctags作為語言parser,支持 100+ 種語言,只能生成定義索引不能生成引用索引。雖然貌似universal-ctags已經支持生成引用tags,但是依然不能配合gtags工作(見這里),我也試了各種操作都沒成功,也許是因為這個PR沒有被merge。

pygments
使用pygments作為語言parser,號稱支持300+種語言。

native-pygments
對于原生支持的6種語言使用內置parser,其他語言使用pygments作為parser。

等等

也可以在`vimrc`里設置`g:Lf_Gtagslabel`達到同樣的目的。

--gtagslibpath [ ...]

用來指定項目所用 library 的 Paths,這樣就可以生成 library 的索引,查找定義或引用時可以跳轉到 library 代碼中去。后面指定的路徑還可以是一個或多個其他項目路徑,跳轉時可以跳到其他項目中的文件。

查找tags
Leaderf[!] gtags [--current-buffer | --all-buffers | --all] [--result ] [COMMON_OPTIONS]

此命令可以列出當前buffer、所有打開的buffer或者整個項目的tags。

Leaderf[!] gtags等同于Leaderf[!] gtags --all,列出整個項目的tags。

--result 指定顯示格式,可以是ctags(default), ctags-x或者ctags-mod

ctags格式

ctags-x格式

ctags-mod格式

查找定義、引用
Leaderf[!] gtags -d  [--auto-jump []] [-i] [--literal] [--path-style ] [-S ]
                 [--append] [--match-path] [--gtagsconf ] [--gtagslabel 

可以是正則表達式。

--auto-jump [] 意思是如果只有一個結果直接跳過去。

其他

Leaderf[!] gtags -g 功能已被Leaderf rg包含。

Leaderf gtags --nextLeaderf gtags --previous相當于quickfix的:cnext:cprevious命令,在LeaderF結果窗口關閉的情況下也可以使用。

更多內容請參考:Leaderf gtags -h 和 doc。

使用示例
let g:Lf_GtagsAutoGenerate = 1
let g:Lf_Gtagslabel = "native-pygments"
noremap fr :=printf("Leaderf! gtags -r %s --auto-jump", expand(""))
noremap fd :=printf("Leaderf! gtags -d %s --auto-jump", expand(""))
noremap fo :=printf("Leaderf! gtags --recall %s", "")
noremap fn :=printf("Leaderf gtags --next %s", "")
noremap fp :=printf("Leaderf gtags --previous %s", "")

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25115.html

相關文章

  • 讓人相見恨晚vim插件:模糊查找神器LeaderF

    摘要:是什么是一個用寫的插件,可以在成千上萬數十萬個文件中,通過模糊查找的方式,快速找到目標文件。它還有很多衍生功能快速打開或定位某個最近使用的文件包括函數類變量等命令歷史文件中的某一行的等等。友情鏈接,也許是最好的模糊查詢插件 提到vim的模糊查找插件,很多人第一反應是ctrlp.vim,ctrlp知名度很高,但跟其它的同類插件相比,它的唯一優點是用vimL編寫(這讓它的性能是所有同類插件...

    Near_Li 評論0 收藏0
  • vim模糊查找插件LeaderF新功能介紹

    摘要:前言上一篇文章讓人相見恨晚的插件模糊查找神器概括性的介紹了的基本功能,本篇對的新功能做一下介紹。空格分隔的每個子串都是對整個字符串的模糊匹配,而不是精確匹配。 前言 上一篇文章《讓人相見恨晚的vim插件:模糊查找神器LeaderF》概括性的介紹了LeaderF的基本功能,本篇對LeaderF的新功能做一下介紹。 統一的命令接口 隨著LeaderF功能的不斷增多,LeaderF的命令也在...

    junnplus 評論0 收藏0
  • 眾里尋她千百度--正則表達式

    摘要:如果經過一系列輸入,最終如果能達到狀態,則輸入內容一定滿足正則表達式。正則表達式可以轉換為,已經有成熟的算法實現這一轉換。不過有時候轉換為可能導致狀態空間的指數增長,因此直接用識別正則表達式。 原文地址 先來看一個讓人震撼的小故事,故事來自知乎問題PC用戶的哪些行為讓你當時就震驚了? 同學在一個化妝品公司上班,旁邊一個大媽(四十多歲)發給他一個exl表,讓他在里面幫忙找一個經銷商的資料...

    golden_hamster 評論0 收藏0
  • Java面試 32個核心必考點完全解析

    摘要:如問到是否使用某框架,實際是是問該框架的使用場景,有什么特點,和同類可框架對比一系列的問題。這兩個方向的區分點在于工作方向的側重點不同。 [TOC] 這是一份來自嗶哩嗶哩的Java面試Java面試 32個核心必考點完全解析(完) 課程預習 1.1 課程內容分為三個模塊 基礎模塊: 技術崗位與面試 計算機基礎 JVM原理 多線程 設計模式 數據結構與算法 應用模塊: 常用工具集 ...

    JiaXinYi 評論0 收藏0

發表評論

0條評論

hsluoyz

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<