vim:在新标签页中打开标签

时间:2011-05-20 08:22:36

标签: vim vim-plugin

是否有插件或脚本在新标签中打开ctags条目?我想把光标放在一个函数上,按ctrl +]并在另一个选项卡中打开该条目。我也想,如果我在视觉上选择一个条目,对于ctrl +]仍然可以工作并在新的vim选项卡中打开。

4 个答案:

答案 0 :(得分:82)

你可以

C-瓦特 Ç - ] C-瓦特 Ť

达到这种效果

然后你也可以映射:

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

修改 ,根据您的实际需要,不要忘记您可以在预览(:ptag)中打开标签,例如 C-瓦特 } 。只是提一下......

答案 1 :(得分:5)

以下是两个非常特殊的映射(如果您的代码由ctags生成):

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

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

优点:

缺点:

  • 如果您在不选择任何匹配项的情况下退出匹配列表,则新创建的选项卡将保持打开状态
  • 如果根本没有匹配则会发生同样的情况

P.S。你能为视觉模式映射提供一个用例吗?

P.P.S。如果您使用cscope生成标记(优于ctags)并使用其vim mappings,请将以上映射替换为以下映射:

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

答案 2 :(得分:2)

如果有人还在寻找解决方案。在此解决方案中,如果未找到任何标记,则不会再留下空白标签。

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

答案 3 :(得分:1)

您可以在〜/ .vimrc中设置键​​盘快捷键“ g”,然后按CONTROL-],如下所示:

nmap g<C-]> :execute 'tab tag '.expand('<cword>')<CR>

nmap       means 'when in normal mode'
g<C-j>     is the shortcut, 'g' followed by CTRL-]
execute    is a means of executing a command passed as a string
tab tag    means "open a new tab and run 'ta'"
expand     is used to expansion of a vim item
<cword>    means a word the same as used for '*'. See also <cWORD>

您可以通过:tab标记 functionname

测试“ tab ta”