gtags可以导航回来吗?

时间:2015-02-12 10:52:47

标签: vim gnu-global

我使用带有gtags插件的vim来通过多个文件读取代码。一切都没问题,除了我在运行之前不知道如何导航回到之前的位置:CtagsCursor跳转到令牌定义。我通读了GNU全球在线文档,但没有发现任何有用的内容。但是在“使用GLOBAL的3.4 Elvis”一章中,它说“CTRL-T返回到最新的标签上下文。”,这正是我想要的。不知道为什么没有为vim实现这个功能,或者我有什么问题?

BR,Ruochen

4 个答案:

答案 0 :(得分:3)

<C-t>是与Vim的“标记堆栈”相关的内置命令。

看起来你正在使用的插件没有实现类似的功能(并且不会与标记堆栈交互)所以你留下<C-o> / <C-i>来跳转跳转清单。

答案 1 :(得分:1)

我使用gtags-cscope作为cscopeprog来解决问题。另外,我也激活了cscopetag以在vim中使用cscope进行ctag查找。这样,如果按<C-]>,则会在gtags和<C-t>中搜索声明,然后再返回。

对于我映射到<C-\>的引用的查找,我使用quickfix窗口。这不使用标记堆栈,<C-t>将无效。

我尝试使用标记堆栈,但这会导致杂乱的标记堆栈和大的选择窗口。如果您查找多个引用,则必须多次按<C-t>,这就是我决定使用quickfix方法的原因。

这是我的实际配置。

set cscopeprg=gtags-cscope
if has('cscope')
  set cscopetag cscopeverbose
  if has('quickfix')
    set cscopequickfix=s-,c-,d-,i-,t-,e-
  endif

  map <C-\> :cs find c <C-R>=expand("<cword>")<CR><CR>
endif

如果您想尝试在没有quickfix的情况下进行参考查找,请删除c-中的cscopequickfix选项。

另一个提示,cscopeverbose是使用cscope时打印错误消息的选项。否则你不会收到错误(例如没有添加gtags文件或找不到符号)。

编辑1:

要加载GTAGS文件,请使用内置命令cs add ./GTAGS

答案 2 :(得分:1)

GNU GLOBAL有两个方便的vim插件gtags.vimgtags-cscope.vim

gtags-cscope.vim的标题注释表示它用于将GLOBAL与Vim的cscope接口集成。

所以你需要做的是:

  1. 安装vim插件(它们位于tarball
    • cp /path/to/global-source/*.vim ~/plugin/
  2. ~/.vimrc
  3. 中添加一些选项

    gtags-cscope.vim的标题评论包含所有可用选项。 就我而言,我使用以下内容:

    " To use the default key/mouse mapping:
    let GtagsCscope_Auto_Map = 1
    " If you hope auto loading:
    let GtagsCscope_Auto_Load = 1
    " Don't show warning if GTAGS not found
    let GtagsCscope_Quiet = 1
    " To use 'vim -t ', ':tag' and '<C-]>'
    set cscopetag
    

答案 3 :(得分:0)

我查看了文档,根据第3.5.1节,似乎vim中的gnu-global不支持标记堆栈。特征: http://www.gnu.org/software/global/globaldoc_toc.html#Features_0028Vim_0029

在上面的描述中,有一个链接设置使用标签栈的插件,所以检查出来。

除了使用ctrl-octrl-i作为替代品应该可以正常工作。