是否有插件或脚本可以在新选项卡中打开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"