Comme il ne peut pas influer sur la liste des tampons avec une commande :bufdo
-argument (voir :help :bufdo
), nous devons utiliser plus script Vim verbeux encore assez simple.
La fonction ci-dessous énumère tous les numéros de tampons existants et supprime ceux qui ne porte pas de nom (affiché comme [No Name]
dans l'interface ) et les modifications non enregistrées. (Ce dernier est garanti par la commande :bdelete
qui, sans le signe !
, ne supprime pas un tampon modifié).
function! DeleteEmptyBuffers()
let [i, n; empty] = [1, bufnr('$')]
while i <= n
if bufexists(i) && bufname(i) == ''
call add(empty, i)
endif
let i += 1
endwhile
if len(empty) > 0
exe 'bdelete' join(empty)
endif
endfunction
Si vous souhaitez supprimer des tampons vides complètement, y compris ceux débarquées, pensez (avec précaution!) Remplaçant bdelete
avec bwipeout
(voir :help :bd
, :help :bw
).
Pour tester le contenu d'un tampon à supprimer, utilisez la fonction getbufline()
. Par exemple, pour être absolument certain que le tampon ne contient aucun texte, modifiez l'instruction if
à l'intérieur de la boucle while
comme suit.
if bufloaded(i) && bufname(i) == '' && getbufline(i, 1, 2) == ['']
Notez que bufexists()
est changé en bufloaded()
ici. C'est nécessaire car il est possible d'obtenir le contenu seulement de ces tampons qui sont chargés (pour les tampons déchargés getbufline()
renvoie la liste vide indépendamment de leur contenu).
Notez que la commande ': bufdo'-argument ne doit pas ajouter ou supprimer des tampons (voir': help: bufdo'). –