vim 插件 - vim:在新选项卡中打开标签



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

你可以

C-w C-]C-wT

为了达到这种效果

然后,您还可以映射:

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

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

这里有

两个非常临时的映射(如果你的标签是由ctags生成的):

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

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

优点:

  • "在我的机器上工作" ©

缺点:

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

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

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

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

以防有人仍在寻找解决方案。在此解决方案中,当找不到标签时,将不再留下空白选项卡。

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

您可以在 ~/.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 标签函数名称测试 "tab ta"

最新更新