作者wei115 (NEET)
看板Editor
标题Re: [vim ] 使用gtags插件的结果不如预期
时间Tue Apr 23 10:30:15 2019
※ 引述《wei115 (NEET)》之铭言:
: 如题
: 想用gtags来看code
: 但相关插件一直不工作
: 我预期的结果是装好插件後,使用ctags的 <C-]> <C-t>可以在程式码之间跳转和返回
: 但实际上这快捷键好像和ctags冲突
: 插件的快捷键并没有取代ctags的快捷键
: 所以vim一直提示我『E426: 找不到标签(tag):』
: 使用的插件是
: Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
: Plug 'jistr/vim-nerdtree-tabs'
: Plug 'ludovicchabant/vim-gutentags'
: Plug 'skywind3000/gutentags_plus'
: 附上vimrc
: https://ideone.com/szLBNL
: 平台是windows 10 64bit,msys2
: vim -versoin
: VIM - Vi IMproved 8.1 (2018 May 17, compiled May 31 2018 11:16:13)
: 此vimrc在笔电上可以正常运作
: 笔电平台是windows 7 64bit,msys2
: vim版本也是8.1
: 想问问看这要如何解决,谢谢
放弃了一段时间,又因为要用到,所以又重新继续搞
发现之前搞错了一些东西
首先能动的一直是ctags(gtags>ags-cscope界面太难用了....)
我以前一直以为我用的是gtags但其实是ctags
所以一开始就没有用到gutentags_plus这个插件的功能
用的只有vim-gutentags
这是一个可以在vim8上,在後台执行tags更新的插件
他的设定
let g:gutentags_modules = ['ctags', 'gtags_cscope']
let g:gutentags_project_root = ['.root', '.git']
let g:gutentags_cache_dir = expand('~/.cache/tags')
意思是说会在打开的目录向上搜寻,直到遇到.root或.git,然後在~/.cache/tags建立
ctags和gtags的tag档
因为只要用到ctags所以改成
let g:gutentags_modules = ['ctags']
就只会建立ctags档了
照理来说,此时只要打开专案里的原始档,此插件就会自动产生tags挡了,然後自动设定
ctags
就能用<C-]> <C-t>在程式码之间跳转了
但我发现,在win10的wsl和msys2环境里,在~/.cache/tags里的tags档会呈现
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to
lines/
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR Darren Hiebert /
[email protected]/
!_TAG_PROGRAM_NAME Exuberant Ctags //
!_TAG_PROGRAM_URL
http://ctags.sourceforge.net /official site/
!_TAG_PROGRAM_VERSION 5.8 //
这样的状态
有就是没有产生tags
为何会这样让我百思不得其解(或许只有我的电脑如此....)
但他有一个变数
let g:gutentags_ctags_extra_args = []
功能是传入参数,让ctags处理
一开始我用
let g:gutentags_ctags_extra_args = ['*']
这样确实产生了tags档了,但他的路径是相对路径,在跳转程式码的时候,他会在
~/.cache/tags下寻找原始档,但这样自然是找不到
所以要传入的是绝对路径
後来在翻阅了相关的资料後(感谢google和google翻译)
终於找到了解决方法,在.vimrc中加入以下程式码便能传入绝对路径
"获得打开的档案路径,并把所有的空白' '转成问号'?'
function FindSessionDirectory() abort
if len(argv()) > 0
return substitute(fnamemodify(argv()[0], ':p:h'), "\ ", "?", "g")
endif
return getcwd()
endfunction
let g:gutentags_ctags_extra_args = [FindSessionDirectory()]
之所以要把空白转成问号的原因是因为如果有空白的参数传入,tags也会没办法产生,就
算加上跳出字元也一样,原因不明
大guy4这样
不怎麽高明的解决方法,但现在终於能比较简单的阅读程式码了.....
参考资料:
https://zhuanlan.zhihu.com/p/36279445
https://bit.ly/2IQYXQT
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 110.26.6.130
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Editor/M.1555986620.A.22A.html
※ 编辑: wei115 (110.26.6.130), 04/23/2019 10:33:46
1F:推 mars90226: 我最近转用lsp了,用neovim+coc.nvim+ccls来看C++ code 04/23 16:35
2F:→ mars90226: 虽然有些时候不如预期就是了,#define 包住的会找不到 04/23 16:36
3F:→ mars90226: 然後我可能没有真的让他把全部code index,有时候会找 04/23 16:36
4F:→ mars90226: 不到应该要有的东西,这部份倒是可以用grep补 04/23 16:37
5F:→ mars90226: 建议设一个mapping可以用fzf+ripgrep去搜寻cursor word 04/23 16:38
6F:→ mars90226: 很多时候只要这样就可以找到大部分的东西 04/23 16:38