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