我使用带有gtags插件的vim来通过多个文件读取代码。一切都没问题,除了我在运行之前不知道如何导航回到之前的位置:CtagsCursor跳转到令牌定义。我通读了GNU全球在线文档,但没有发现任何有用的内容。但是在“使用GLOBAL的3.4 Elvis”一章中,它说“CTRL-T返回到最新的标签上下文。”,这正是我想要的。不知道为什么没有为vim实现这个功能,或者我有什么问题?
BR,Ruochen答案 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.vim
和gtags-cscope.vim
。
gtags-cscope.vim
的标题注释表示它用于将GLOBAL与Vim的cscope
接口集成。
所以你需要做的是:
cp /path/to/global-source/*.vim ~/plugin/
~/.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
答案 3 :(得分:0)
我查看了文档,根据第3.5.1节,似乎vim中的gnu-global不支持标记堆栈。特征: http://www.gnu.org/software/global/globaldoc_toc.html#Features_0028Vim_0029
在上面的描述中,有一个链接设置使用标签栈的插件,所以检查出来。
除了使用ctrl-o
和ctrl-i
作为替代品应该可以正常工作。