vim:在新标签中打开标签

有没有插件或脚本来打开新选项卡中的ctags条目? 我想把光标放在一个函数上,按ctrl +],并在另一个选项卡中打开该条目。 我也想,如果我直观地select一个条目,为Ctrl +]仍然工作,并打开一个新的VIM选项卡。

您可以

Cw C-] Cw T

为了达到这个效果

那么你也可以映射:

 :nnoremap <silent><Leader><C-]> <Cw><C-]><Cw>T 

编辑: 另外,根据你真正想要什么,不要忘记你可以用例如Cw }预览( :ptag )打开标签。 只是提到它的情况下…

这里有两个漂亮的ad-hoc映射(如果你的标签是由ctags生成的):

 nnoremap <C-]> :tabnew %<CR>g<C-]> vnoremap <C-]> <Esc>:tabnew %<CR>gvg<C-]> 

首先,我们打开一个新标签中的当前缓冲区; 那么我们尝试跳转到游标下的标签( g<C-]> ,它等于:tjump ,如果只有一个匹配,则直接跳转到标签,或者如果有多个匹配,则提供一个匹配列表。

优点:

  • “ 在我的机器上工作 ”©

缺点:

  • 如果您从匹配列表中退出而没有select任何匹配项,则新创build的选项卡将保持打开状态
  • 如果根本没有匹配,也会发生同样的情况

PS你能提供一个可视化模式映射的用例吗?

PPS如果您使用cscope (比ctags更好)生成标签并使用其vim映射 ,请将上述映射replace为以下映射:

 nnoremap <C-]> :tabnew %<CR><C-]> vnoremap <C-]> <Esc>tabnew %<CR>gv<C-]> 

如果有人仍在寻找解决scheme。 在没有标签的情况下,这个解决scheme不会留下任何空白标签。

 function! w:GoToTag(tagWord) let l:tagfile = &tags :tabe execute 'set tags=' . l:tagfile execute ':silent tjump ' . a:tagWord let l:tagFilename = expand('%:t') if l:tagFilename == '' :tabclose :tabprevious endif endfunction