就像标题所说:"如何手动将堆栈输入推入vim tagstack?"
问题在于:我一直在使用gtags / global + unite.vim插件一段时间(顺便说一句,这两个插件很棒!),但它无法自动在tagstack中插入标签条目。有没有办法解决它?
答案 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将负责填充标签栈。