web-dev-qa-db-fra.com

vim: Ouvrir la balise dans un nouvel onglet

Existe-t-il un plugin ou un script pour ouvrir les entrées ctags dans un nouvel onglet? Je voudrais placer mon curseur sur une fonction, appuyer sur ctrl +] et ouvrir l'entrée dans un autre onglet. J'aimerais également que je sélectionne visuellement une entrée, pour que ctrl +] fonctionne toujours et s'ouvre dans un nouvel onglet vim.

55
Paul Tarjan

Vous pouvez

C-wC-]C-wT

Pour obtenir cet effet

Ensuite, vous pouvez également cartographier cela:

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

Edit: également, selon ce que vous voulez réellement, n'oubliez pas que vous pouvez ouvrir des balises dans l'aperçu (:ptag) avec par exemple C-w}. Je le mentionne juste au cas où ...

85
sehe

Voici deux jolies correspondances ad-hoc (au cas où vos balises sont générées par ctags):

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

D'abord, nous ouvrons le tampon actuel dans un nouvel onglet; puis nous essayons de passer à une balise sous le curseur (g<C-]>, qui est égal à :tjump, passe directement à la balise s'il n'y a qu'une seule correspondance, ou fournit une liste de correspondances s'il y en a plusieurs).

Avantages:

Les inconvénients:

  • si vous quittez la liste des correspondances sans en choisir aucune, l'onglet nouvellement créé restera ouvert
  • la même chose se produit s'il n'y a aucun match

P.S. Pourriez-vous fournir un cas d'utilisation pour la cartographie du mode visuel?

P.P.S. Si vous générez des balises avec cscope (ce qui est mieux que ctags) et utilisez ses mappages vim , remplacez les mappages ci-dessus par les suivants:

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

Au cas où quelqu'un chercherait toujours une solution. Sur cette solution lorsqu'aucune balise n'est trouvée, il ne restera plus d'onglet vide.

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
2
notmii

Vous pouvez configurer un raccourci clavier, 'g' suivi de CONTROL-], dans ~/.vimrc comme suit:

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>

Vous pouvez tester "tab ta" via: tab tab functionname

1
Malcolm Boekhoff