vim:在新标签中打开标签
有没有插件或脚本来打开新选项卡中的ctags条目? 我想把光标放在一个函数上,按ctrl +],并在另一个选项卡中打开该条目。 我也想,如果我直观地select一个条目,为Ctrl +]仍然工作,并打开一个新的VIM选项卡。
您可以
Cw C-] Cw T
为了达到这个效果
那么你也可以映射:
:nnoremap <silent><Leader><C-]> <Cw><C-]><Cw>T
编辑: 另外,根据你真正想要什么,不要忘记你可以用例如Cw }预览( :ptag
)打开标签。 只是提到它的情况下…
这里有两个漂亮的ad-hoc映射(如果你的标签是由ctags
生成的):
nnoremap <C-]> :tabnew %<CR>g<C-]> vnoremap <C-]> <Esc>:tabnew %<CR>gvg<C-]>
首先,我们打开一个新标签中的当前缓冲区; 那么我们尝试跳转到游标下的标签( g<C-]>
,它等于:tjump
,如果只有一个匹配,则直接跳转到标签,或者如果有多个匹配,则提供一个匹配列表。
优点:
- “ 在我的机器上工作 ”©
缺点:
- 如果您从匹配列表中退出而没有select任何匹配项,则新创build的选项卡将保持打开状态
- 如果根本没有匹配,也会发生同样的情况
PS你能提供一个可视化模式映射的用例吗?
PPS如果您使用cscope (比ctags
更好)生成标签并使用其vim映射 ,请将上述映射replace为以下映射:
nnoremap <C-]> :tabnew %<CR><C-]> vnoremap <C-]> <Esc>tabnew %<CR>gv<C-]>
如果有人仍在寻找解决scheme。 在没有标签的情况下,这个解决scheme不会留下任何空白标签。
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