如何在不打开新拆分的情况下使ctags在垂直拆分上显示标签定义?

时间:2015-11-09 00:13:16

标签: vim tags ctags

我正在使用ctags,我将map <C-]> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>添加到我的vimrc中。但是,每次都会打开一个新的垂直分割。有没有办法在垂直拆分上显示标签定义而不是每次都打开一个新的?

更新:我还想知道是否有办法正常使用ctag堆栈。也就是说,使用ctrl + t从堆栈中弹出一个位置?

2 个答案:

答案 0 :(得分:6)

以下命令可实现您正在寻找的结果:

:execute "vertical ptag " . expand("<cword>")

所以,这个映射也应该有效:

nnoremap <C-]> :execute "vertical ptag " . expand("<cword>")<CR>

您可能希望将'previewheight'设置为更高的值。

<强>更新

作为替代解决方案,如果您想继续在标签中导航,则可以使用以下内容:

function! FollowTag()
  if !exists("w:tagbrowse")
    vsplit
    let w:tagbrowse=1
  endif
  execute "tag " . expand("<cword>")
endfunction

nnoremap <c-]> :call FollowTag()<CR>

尽管如此,我认为您应该考虑通过考虑以下标准Vim快捷方式来修改创建此类快捷方式的需求:

  1. <c-]>:跳转到光标更新标记堆栈下的单词的标记定义。
  2. <c-w>}:打开一个预览窗口,其中包含标签定义的位置。光标不会改变其位置,因此不会更新标记堆栈。
  3. <c-w>z:关闭预览窗口。
  4. <c-w>v:将当前窗口分成两部分,保持光标位置。
  5. 因此,如果要快速检查标记声明,可以使用<c-w>},然后<c-w>z关闭它。但是,如果您想要导航,则只需使用<c-w>v创建拆分,然后使用标准<c-]在标记中导航。完成后,您只需使用<c-w>c关闭窗口。

答案 1 :(得分:0)

下面的命令应该做你想要的,至少以一种黑客的方式:

nnoremap <C-]> :only<bar>vsplit<CR>:execute "tag" . expand('<cword>')<CR>