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

use*_*985 7 tags vim ctags

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

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

Vit*_*tor 7

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

:execute "vertical ptag " . expand("<cword>")
Run Code Online (Sandbox Code Playgroud)

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

nnoremap <C-]> :execute "vertical ptag " . expand("<cword>")<CR>
Run Code Online (Sandbox Code Playgroud)

您可能希望设置'previewheight'更高的值.

更新

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

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

nnoremap <c-]> :call FollowTag()<CR>
Run Code Online (Sandbox Code Playgroud)

不过,我认为你应该考虑通过考虑以下标准的Vim快捷方式来修改创建这种快捷方式的需要:

  1. <c-]> :跳转到光标更新标记堆栈下的单词的标记定义.
  2. <c-w>}:打开包含标记定义位置的预览窗口.光标不会更改其位置,因此不会更新标记堆栈.
  3. <c-w>z :关闭预览窗口.
  4. <c-w>v :将当前窗口分成两部分,保持光标位置.

因此,您可以使用,<c-w>}如果您想快速检查标签声明,然后<c-w>z关闭它.但是,如果您想要导航,那么您可以简单地使用<c-w>v创建拆分,然后使用标准<c-]在标签中导航.完成后,您只需关闭窗口即可<c-w>c.