簡體   English   中英

vim:在新標簽頁中打開標簽

[英]vim: Open tag in new tab

是否有插件或腳本可以在新選項卡中打開 ctags 條目? 我想將光標放在一個函數上,按ctrl+]並在另一個選項卡中打開該條目。 我還希望我在視覺上選擇一個條目,以便ctrl+]仍然有效並在新的 vim 選項卡中打開。

你可以

Cw C-] Cw T

為了達到這個效果

然后你還可以映射:

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

編輯:另外,根據您的實際需要,不要忘記您可以使用例如Cw }在預覽( :ptag )中打開標簽。 只是提一下以防萬一...

這里有兩個非常特別的映射(如果你的標簽是由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-]>

如果有人仍在尋找解決方案。 在此解決方案中,當未找到標簽時,將不會留下更多空白選項卡。

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 tag functionname測試“tab ta”

使用插件:vim-tagjump

https://github.com/ipod825/vim-tagjump

紫薯布丁

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM