摘要:也就是,是一個(gè)非常強(qiáng)大的源碼符號(hào)索引工具。韋大的中符號(hào)索引篇對(duì)有比較詳細(xì)的介紹,本文再做一些補(bǔ)充。的最新版本已經(jīng)是,該版本了韋大文中提到的下面文件名大小寫的。
Gtags
Gtags也就是GNU GLOBAL,是一個(gè)非常強(qiáng)大的源碼符號(hào)索引工具。它通過建立索引數(shù)據(jù)庫,不但可以查找函數(shù)的定義,還可以查找函數(shù)的所有引用(被調(diào)用的地方);而且它還可以增量地更新索引數(shù)據(jù)庫,當(dāng)代碼有所改變時(shí),它可以在很短的時(shí)間內(nèi)更新索引數(shù)據(jù)庫,保持索引數(shù)據(jù)庫和代碼同步。
韋大的 Vim 8 中 C/C++ 符號(hào)索引:GTags 篇 對(duì) gtags 有比較詳細(xì)的介紹,本文再做一些補(bǔ)充。
GLOBAL-6.6.3 released
Gtags的最新版本已經(jīng)是6.6.3,該版本 fix了韋大文中提到的 Windows下面文件名大小寫的 bug。
在 Linux上,不配置let $GTAGSCONF = "/path/to/share/gtags/gtags.conf"也可以正常工作。
當(dāng)項(xiàng)目文件的路徑包含非ASCII字符時(shí),使用pygments會(huì)報(bào)UnicodeEncodeError: "latin-1" codec can"t encode characters in position 5-8: ordinal not in range(256)
自動(dòng)生成Gtags索引數(shù)據(jù)庫LeaderF 可以自己管理 gtags 數(shù)據(jù)庫(GTAGS,GRTAGS,GPATH),它不會(huì)在你的項(xiàng)目目錄下生成任何額外的文件或目錄。gtags 數(shù)據(jù)庫文件存儲(chǔ)在$HOME/.LfCache/gtags/%PATH%OF%YOUR%PROJECT/下面, %PATH%OF%YOUR%PROJECT 是把你項(xiàng)目路徑中的 或 / 替換成 %。
只要設(shè)置let g:Lf_GtagsAutoGenerate = 1, LeaderF 就會(huì)在打開第一個(gè)文件時(shí)自動(dòng)生成 gtags 數(shù)據(jù)庫。當(dāng)代碼有更改并且已經(jīng)有 gtags 數(shù)據(jù)庫生成時(shí),更改的代碼會(huì)自動(dòng)同步到 gtags 數(shù)據(jù)庫(即使g:Lf_GtagsAutoGenerate是0)。
只有在項(xiàng)目根目錄下有g:Lf_RootMarkers(默認(rèn)值是[".git", ".hg", ".svn"])里面指定的文件或目錄時(shí),LeaderF 才會(huì)自動(dòng)生成 gtags 數(shù)據(jù)庫;否則只能手動(dòng)生成 gtags 數(shù)據(jù)庫:Leaderf gtags --update,但是當(dāng)代碼有更改時(shí),gtags 數(shù)據(jù)庫依然可以自動(dòng)更新。
具體使用方法可以用:Leaderf gtags -h來查看。
usage: Leaderf[!] gtags [-h] [--remove] [--recall] Leaderf[!] gtags --update [--gtagsconf] [--gtagslabel
注意:如果:Leaderf后面有感嘆號(hào),會(huì)直接進(jìn)入normal模式;如果沒有感嘆號(hào),則是輸入模式,此時(shí)可以輸入字符來進(jìn)行模糊匹配過濾??梢杂胻ab鍵在兩個(gè)模式間來回切換。
手動(dòng)生成gtags數(shù)據(jù)庫Leaderf[!] gtags --update [--gtagsconf] [--gtagslabel ] [--accept-dotfiles] [--skip-unreadable] [--skip-symlink [ ]] [--gtagslibpath [ ...]]
此命令完全異步,不會(huì)卡住你的UI。
--gtagsconf
用來指定 gtags.conf 文件的路徑,一般情況下不需要指定,默認(rèn)值就可以很好地工作。對(duì)于Windows上,如果相對(duì)于gtags.exe所在路徑有../share/gtags/gtags.conf,也不需要指定該選項(xiàng)。如果需要用戶自己特有的針對(duì) gtags 的配置,可以指定用戶的配置文件。
也可以在vimrc里設(shè)置g:Lf_Gtagsconf達(dá)到同樣的目的。
--gtagslabel
用來指定gtagslabel,如果不指定,默認(rèn)值是 "default"。
default
使用內(nèi)置parser,只支持 6 種語言(C,C++,Java,PHP4,Yacc,匯編)。
ctags
使用exuberant-ctags作為語言parser,支持 40+ 種語言,只能生成定義索引不能生成引用索引。
new-ctags
使用universal-ctags作為語言parser,支持 100+ 種語言,只能生成定義索引不能生成引用索引。雖然貌似universal-ctags已經(jīng)支持生成引用tags,但是依然不能配合gtags工作(見這里),我也試了各種操作都沒成功,也許是因?yàn)檫@個(gè)PR沒有被merge。
pygments
使用pygments作為語言parser,號(hào)稱支持300+種語言。
native-pygments
對(duì)于原生支持的6種語言使用內(nèi)置parser,其他語言使用pygments作為parser。
等等
也可以在`vimrc`里設(shè)置`g:Lf_Gtagslabel`達(dá)到同樣的目的。
--gtagslibpath
用來指定項(xiàng)目所用 library 的 Paths,這樣就可以生成 library 的索引,查找定義或引用時(shí)可以跳轉(zhuǎn)到 library 代碼中去。后面指定的路徑還可以是一個(gè)或多個(gè)其他項(xiàng)目路徑,跳轉(zhuǎn)時(shí)可以跳到其他項(xiàng)目中的文件。
查找tagsLeaderf[!] gtags [--current-buffer | --all-buffers | --all] [--result] [COMMON_OPTIONS]
此命令可以列出當(dāng)前buffer、所有打開的buffer或者整個(gè)項(xiàng)目的tags。
Leaderf[!] gtags等同于Leaderf[!] gtags --all,列出整個(gè)項(xiàng)目的tags。
--result
ctags格式
ctags-x格式
ctags-mod格式
Leaderf[!] gtags -d[--auto-jump [ ]] [-i] [--literal] [--path-style ] [-S ] [--append] [--match-path] [--gtagsconf ] [--gtagslabel ] [COMMON_OPTIONS] Leaderf[!] gtags -r [--auto-jump [ ]] [-i] [--literal] [--path-style ] [-S ] [--append] [--match-path] [--gtagsconf ] [--gtagslabel ] [COMMON_OPTIONS]
--auto-jump [
Leaderf[!] gtags -g
Leaderf gtags --next 和 Leaderf gtags --previous相當(dāng)于quickfix的:cnext和:cprevious命令,在LeaderF結(jié)果窗口關(guān)閉的情況下也可以使用。
更多內(nèi)容請(qǐng)參考:Leaderf gtags -h 和 doc。
使用示例let g:Lf_GtagsAutoGenerate = 1 let g:Lf_Gtagslabel = "native-pygments" noremapfr : =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", "")
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25115.html
摘要:是什么是一個(gè)用寫的插件,可以在成千上萬數(shù)十萬個(gè)文件中,通過模糊查找的方式,快速找到目標(biāo)文件。它還有很多衍生功能快速打開或定位某個(gè)最近使用的文件包括函數(shù)類變量等命令歷史文件中的某一行的等等。友情鏈接,也許是最好的模糊查詢插件 提到vim的模糊查找插件,很多人第一反應(yīng)是ctrlp.vim,ctrlp知名度很高,但跟其它的同類插件相比,它的唯一優(yōu)點(diǎn)是用vimL編寫(這讓它的性能是所有同類插件...
摘要:前言上一篇文章讓人相見恨晚的插件模糊查找神器概括性的介紹了的基本功能,本篇對(duì)的新功能做一下介紹??崭穹指舻拿總€(gè)子串都是對(duì)整個(gè)字符串的模糊匹配,而不是精確匹配。 前言 上一篇文章《讓人相見恨晚的vim插件:模糊查找神器LeaderF》概括性的介紹了LeaderF的基本功能,本篇對(duì)LeaderF的新功能做一下介紹。 統(tǒng)一的命令接口 隨著LeaderF功能的不斷增多,LeaderF的命令也在...
摘要:如果經(jīng)過一系列輸入,最終如果能達(dá)到狀態(tài),則輸入內(nèi)容一定滿足正則表達(dá)式。正則表達(dá)式可以轉(zhuǎn)換為,已經(jīng)有成熟的算法實(shí)現(xiàn)這一轉(zhuǎn)換。不過有時(shí)候轉(zhuǎn)換為可能導(dǎo)致狀態(tài)空間的指數(shù)增長,因此直接用識(shí)別正則表達(dá)式。 原文地址 先來看一個(gè)讓人震撼的小故事,故事來自知乎問題PC用戶的哪些行為讓你當(dāng)時(shí)就震驚了? 同學(xué)在一個(gè)化妝品公司上班,旁邊一個(gè)大媽(四十多歲)發(fā)給他一個(gè)exl表,讓他在里面幫忙找一個(gè)經(jīng)銷商的資料...
摘要:如問到是否使用某框架,實(shí)際是是問該框架的使用場景,有什么特點(diǎn),和同類可框架對(duì)比一系列的問題。這兩個(gè)方向的區(qū)分點(diǎn)在于工作方向的側(cè)重點(diǎn)不同。 [TOC] 這是一份來自嗶哩嗶哩的Java面試Java面試 32個(gè)核心必考點(diǎn)完全解析(完) 課程預(yù)習(xí) 1.1 課程內(nèi)容分為三個(gè)模塊 基礎(chǔ)模塊: 技術(shù)崗位與面試 計(jì)算機(jī)基礎(chǔ) JVM原理 多線程 設(shè)計(jì)模式 數(shù)據(jù)結(jié)構(gòu)與算法 應(yīng)用模塊: 常用工具集 ...
閱讀 3877·2021-07-28 18:10
閱讀 2585·2019-08-30 15:44
閱讀 1097·2019-08-30 14:07
閱讀 3468·2019-08-29 17:20
閱讀 1587·2019-08-26 18:35
閱讀 3543·2019-08-26 13:42
閱讀 1827·2019-08-26 11:58
閱讀 1600·2019-08-23 18:33