65

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

4

4 回答 4

100

你可以

C-wC-]C-wT

为了达到这个效果

然后你也可以映射:

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

编辑: 另外,根据您的实际需要,不要忘记您可以在预览(:ptag)中打开标签,例如C-w}。只是提到它以防万一...

于 2011-05-20T08:35:23.817 回答
6

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

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

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

优点:

缺点:

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

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

PPS 如果您使用cscope生成标签(优于ctags)并使用其vim 映射,请将上述映射替换为以下映射:

nnoremap <C-]> :tabnew %<CR><C-]>
vnoremap <C-]> <Esc>tabnew %<CR>gv<C-]>
于 2011-07-28T21:16:47.730 回答
3

以防有人仍在寻找解决方案。在此解决方案中,当未找到任何标签时,将不会留下更多空白标签。

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
于 2014-01-10T01:23:13.880 回答
3

您可以在 ~/.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 tag functionname测试“tab ta”

于 2019-06-19T04:00:13.747 回答