4

I use vim with gtags plug in to read code through multiple files. Everything is okay except that I donnot know how to navigate back to the previous position before I run :CtagsCursor to jump to the token definition. I read through the GNU global online docs, but find nothing useful. But in the chapter "3.4 Elvis using GLOBAL", it says "CTRL-T return to the most recent tag context.", which is exactly what I wants. No idea why the function is not implemented for vim, or something is wrong with me?

BR, Ruochen

4

4 回答 4

3

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

看起来您正在使用的插件没有实现类似的功能(并且无论如何也不与标签堆栈交互),因此您可以使用<C-o>/<C-i>在跳转列表中跳转。

于 2015-02-12T11:13:13.133 回答
1

gtags-cscope我通过使用as解决了这个问题cscopeprog。此外,我还激活了 cscopetag 以使用 cscope 在 vi​​m 中进行 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

于 2015-08-19T16:44:58.797 回答
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

的标题注释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
于 2017-02-24T10:42:56.573 回答
0

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

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

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

于 2015-02-12T11:13:54.127 回答