2010-10-13 7 views
4

Je travaille dans Vim avec beaucoup de tampons ouverts dans différentes fenêtres sur différents onglets. Je sais qu'il est simple de simplement charger l'un des tampons existants dans ma fenêtre actuelle. Cependant, certains de mes tampons pour les fichiers volumineux utilisent des expressions de pliage qui provoquent un retard de plusieurs secondes lors du chargement dans une nouvelle fenêtre. D'un autre côté, s'ils sont déjà ouverts dans une fenêtre sur une page à onglets, j'ai juste besoin de sauter dans cette page à onglets et cette fenêtre.Comment passer à un tampon non caché qui existe dans une fenêtre sur un onglet?

Je suppose qu'il n'y a pas de commande pour le faire directement. Ou est-ce?

Pour trouver la fenêtre avec le tampon souhaité que je pourrais écrire une fonction qui fait cela:

  1. pour chaque onglet
  2. pour chaque fenêtre de chaque onglet
  3. vérifier chaque fenêtre pour voir si elle a mon souhaité tampon chargé
  4. déplacer le curseur à la fenêtre trouvée ou tampon ouvert dans la fenêtre sur un nouvel onglet sinon trouvé

quelqu'un at-il déjà écrit ceci? Ou ai-je manqué une façon plus simple d'obtenir ce que je veux? MISE À JOUR: Les réponses 'switchbuf' correspondaient exactement à ce que je cherchais, mais je pourrais quand même utiliser une fonction personnalisée parce que (1) je ne comprenais pas le comportement de l'option 'newtab', car les fenêtres étaient toujours Split, et (2) ma fonction recherche pour les fichiers accueille à vide:

function! Sbuf(filename) 
    let myvar = '' 
    tabdo let myvar = bufwinnr(a:filename) > 0 ? tabpagenr() 
        \ . ' ' . bufwinnr(a:filename) : myvar 
    if myvar > '' 
     silent execute split(myvar)[0] . "tabn" 
     silent execute split(myvar)[1] . "wincmd w" 
    else 
     execute 'tab drop ' . a:filename 
    endif 
endfunction 

Répondre

4

Il suffit de définir l'option switchbuf:

:set switchbuf=useopen,usetab 
:sbuf [filename] 

Si vous ne voulez pas l'option switchbuf activée tout le temps vous devra écrire un amusement ction qui change et réinitialise l'option switchbuf.

function MySwitchBuf(filename) 
    " remember current value of switchbuf 
    let l:old_switchbuf = &switchbuf 
    try 
    " change switchbuf so other windows and tabs are used 
    set switchbuf=useopen,usetab 
    execute 'sbuf' a:filename 
    finally 
    " restore old value of switchbuf 
    let &switchbuf = l:old_switchbuf 
    endtry 
endfunction 
3

Si je ne manque quelque chose, le comportement que vous parler est contrôlé par l'option switchbuf. Il définit où chercher l'utilisateur tampon exigeant (fenêtre courante, toutes les fenêtres dans d'autres onglets, ou nulle part, ie ouvrir le fichier à partir de rien à chaque fois) et comment ouvrir le tampon (dans le nouveau split, tab, ou dans la fenêtre courante). Donc, je pense,

set switchbuf=usetab 

pourrait résoudre le problème pour vous. Cela ordonne à Vim de ne pas ouvrir le fichier, mais de passer à la fenêtre qui contient le tampon, même si cette fenêtre se trouve dans une autre page à onglets. Pour des options supplémentaires, jetez un oeil à :h switchbuf.