Buffer

De Vim-fr.

Cette page est une ébauche concernant ViM, n'hésitez pas à l'améliorer en partageant vos connaissances.

Sommaire

Introduction

Dans vim les buffers représentent l'ensemble des fichiers qui ont été ouverts pendant la session courante. Chaque fois que vous éditez un fichier que vous n'avez pas édité précédemment un buffer est crée.

Par exemple:

$ vim
# ouverture de vim, un buffer anonyme est créé
:w chocolat
# le buffer contient le fichier 'chocolat'


$ vim <fichier>
# ouverture de vim avec un buffer pour <fichier>
:e <autre fichier>
# un nouveau buffer contient <fichier>, l'ancien contient toujours <autre fichier>
:b <fichier>
# revient à l'édition de <fichier>
:b <tab>
# affiche :b <fichier>
:b <tab>
# affiche <autre fichier>
:buffers
# liste tous les buffer ouvert : <fichier> et <autre_fichier>
:ls
# pareil que :buffers, mais en plus court
:bw
# ferme le buffer courrant


Tandis que les buffers correspondent au contenu, la présentation est réalisée par des fenêtres (windows). À un instant donné, un buffer toujours chargé n'est pas nécessairement affiché dans une fenêtre, de même qu'il peut être affiché simultanément dans deux fenêtres Modèle:H.

Astuces

Fermer les vieux buffers

Vim garde donc en mémoire chaque buffer ouvert durant la session (c'est-à-dire depuis la dernière ouverture de Vim). Si vous ouvrez beaucoup de fichiers différents, vous aurez inévitablement un certain nombre de buffers chargés.

Pour vous présentez l'intérêt de l'astuce qui suit, considérez un cas concret :

  • Vous ouvrez, comme moi, un onglet (:tabedit) pour chaque "projet" ou petit travail sur lequel vous travaillez à tel point que pour chacun d'entre eux, vous avez autant d'occasions de charger en mémoire des buffers, d'ouvrir des fenêtres (des splits ou vsplits).
  • Vous utilisez beaucoup le complètement automatique sur le nom de buffer après la commande :b pour recharger dans la fenêtre courante un fichier édité auparavant.
  • Vous éditez des fichiers dont les noms sont similaires mais enregistrés dans des répertoires distincts à tel point que vous finissez par les confondre et par perdre du temps à "tabuler" entre les propositions faites par :b <tab>.

Si vous vous trouvez de prêt ou de loin dans ce cas, cette fonction vous aidera peut-être :

" Fonction pour epurer la liste des buffers {{{
" Version amelioree, inspiree de :
" http://stackoverflow.com/questions/1534835/how-do-i-close-all-buffers-that-arent-shown-in-a-window-in-vim
function! CloseHiddenBuffers()
    " Tableau pour memoriser la visibilite des buffers
    let visible = {}
    " Pour chaque onglet...
    for t in range(1, tabpagenr('$'))
        " Et pour chacune de ses fenetres...
        for b in tabpagebuflist(t)
            " On indique que le buffer est visible.
            let visible[b] = 1 
        endfor
    endfor

    " Pour chaque numero de buffer possible...
    for b in range(1, bufnr('$'))
        " Si b est un numero de buffer valide et qu'il n'est pas visible, on le
        " supprime.
        if bufexists(b) && !has_key(visible, b)
            " On ferme donc tous les buffers qui ne valent pas 1 dans le tableau et qui
            " sont pourtant charges en memoire.
            execute 'bwipeout' b
        endif
    endfor
endfun
" }}}

Elle permet de référencer pour chaque onglet, puis pour chaque fenêtre les fichiers affichés et de supprimer les autres buffers avec :bwipeout. Il faut l'appeler avec la commande :call CloseHiddenBuffers() de temps en temps. Quand on perd la tête parce que :ls donne trop de résultats !

Reférences

Récupérée de « http://vim-fr.org/index.php/Buffer »