Vim 如何使CTAG在垂直拆分上显示标记定义,而不打开新拆分?

Vim 如何使CTAG在垂直拆分上显示标记定义,而不打开新拆分?,vim,tags,ctags,Vim,Tags,Ctags,我使用的是ctags,我在我的vimrc中添加了map:vsp:exec(“tag”.expand(“”)。但是,每次都会打开一个新的垂直拆分。是否有一种方法可以在垂直拆分上显示标记定义,而无需每次打开新的标记定义 更新:我也想知道是否有一种方法可以正常使用ctag堆栈。也就是说,使用ctrl+t从堆栈中弹出一个位置?下面的命令应该做您想做的事情,至少是以一种黑客的方式: nnoremap <C-]> :only<bar>vsplit<CR>:execute

我使用的是ctags,我在我的vimrc中添加了
map:vsp:exec(“tag”.expand(“”)
。但是,每次都会打开一个新的垂直拆分。是否有一种方法可以在垂直拆分上显示标记定义,而无需每次打开新的标记定义


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

下面的命令应该做您想做的事情,至少是以一种黑客的方式:

nnoremap <C-]> :only<bar>vsplit<CR>:execute "tag" . expand('<cword>')<CR>
nnoremap:onlyvsplit:execute“tag”。展开(“”)

以下命令实现您要查找的结果:

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

不过,我认为您应该考虑通过以下标准VIM快捷方式来修改这种快捷方式的必要性:

  • :跳转到光标更新标记堆栈下单词的标记定义
  • }
    :打开带有标记定义位置的预览窗口。光标不会更改其位置,因此标记堆栈不会更新
  • z
    :关闭预览窗口
  • v
    :将当前窗口一分为二,保持光标位置

  • 因此,如果要快速检查标记声明,可以使用
    }
    ,然后使用
    z
    关闭它。但是如果您想导航,那么您可以简单地使用
    v
    创建一个分割,然后是标准的
    谢谢。但是,在第一次之后,它不会正确地进入标记定义。谢谢,如果我将previewheight设置为100,这可以正常工作。但是,标记堆栈将始终为空。你能解释一下垂直ptag是做什么的吗?这就是标记堆栈为空的原因吗?如果没有离开当前缓冲区,为什么需要更新堆栈?你能更新你的问题,解释你到底想要实现什么吗?更新问题。我的意思是,我尝试按ctrl+T键转到上一个位置(从堆栈中弹出一个位置),假设您打开了一个窗口,然后按我们尝试创建的快捷键。根据您的要求,将打开一个新的垂直窗口,光标移动到原始窗口中的关键字声明处。如果我们从标记堆栈中弹出,两个窗口将位于同一位置!这有什么好处?为什么不干脆关闭新窗口呢?假设func1调用func2,后者调用func3。我查找在新窗口中打开的func1。然后我在里面查找func2,然后查找func3。我也在寻找一种方法来回到以前的方式。从VIM 8.0(至少)开始,您可以使用CTRL+W+]在水平拆分中查找标记
    
    nnoremap <C-]> :execute "vertical ptag " . expand("<cword>")<CR>
    
    function! FollowTag()
      if !exists("w:tagbrowse")
        vsplit
        let w:tagbrowse=1
      endif
      execute "tag " . expand("<cword>")
    endfunction
    
    nnoremap <c-]> :call FollowTag()<CR>