如何手动将堆栈条目推入vim tagstack?

时间:2014-10-10 04:04:48

标签: vim tags

就像标题所说:"如何手动将堆栈输入推入vim tagstack?"

问题在于:我一直在使用gtags / global + unite.vim插件一段时间(顺便说一句,这两个插件很棒!),但它无法自动在tagstack中插入标签条目。有没有办法解决它?

3 个答案:

答案 0 :(得分:2)

从vim的最新版本开始(使用" Store where we're jumping from. let pos = [bufnr()] + getcurpos()[1:] let item = {'bufnr': pos[0], 'from': pos, 'tagname': expand('<cword>')} YourCommandToJumpToCWord " Assuming jump was successful, write to tag stack. let winid = win_getid() let stack = gettagstack(winid) let stack['items'] = [item] call settagstack(winid, stack, 't') 检查您的版本是否足够新),将位置推入标签栈很容易:

useState

答案 1 :(得分:1)

在我非常保密的lh-tags插件中,我使用了lh#tags#jump()函数来注入标记并跳转到它们。该功能现已移至我的vim-library:lh#tags#stack#jump()

这个想法总是有一个假的标签文件(在tmpdir中),我需要在那里添加跳转位置作为伪造标签。从那里开始,就像跳到forged_tag_number_000042一样简单。然后Vim会自动为我们维护堆栈。

答案 2 :(得分:1)

我使用了一种从vim-tagimposter中的vim-jedi提取的技术来将标签推入标签栈。 (我相信这与lh-tags是相同的技术。)

对于 omnisharp-vim,您可以将此地图添加到** ftplugin/cs.vim **:

nnoremap <buffer> <Leader>jT :<C-u> TagImposterAnticipateJump <Bar> OmniSharpGotoDefinition<CR>

现在,您可以使用<Leader>jT跳到标签,<C-t>跳回标签,然后 :pop / :tag来上下移动堆栈。 :tags将显示您的标签 前缀为IMPOSTER_

我认为这应该适用于gtags.vim

nnoremap <Leader>jT :<C-u> TagImposterAnticipateJump <Bar> GtagsCursor<CR>

the proposed 'tagfunc'是一个更好的解决方案,它可以让您实现一个返回标签列表的函数(源自gtags / global / whatever),而vim将负责填充标签栈。