Dado que no se permite a afectar a la lista de buffers con un comando :bufdo
-argumento (ver :help :bufdo
), tenemos que utilizar más script de Vim prolijo todavía bastante sencillo.
Ésta función enumera todos los números de amortiguación existente y elimina aquellos que no tienen un nombre (aparece como [No Name]
en la interfaz ) y los cambios no guardados. (Esto último está garantizado por el comando :bdelete
que, sin el signo !
, no elimina un búfer modificado).
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 desea eliminar buffers vacíos por completo, incluyendo los descargadas, considere (con cuidado!) Reemplazando bdelete
con bwipeout
(ver :help :bd
, :help :bw
).
Para probar el contenido de un búfer para eliminar, use la función getbufline()
. Por ejemplo, para estar absolutamente seguro de que el búfer no contiene texto, modifique la instrucción if
dentro del bucle while
de la siguiente manera.
if bufloaded(i) && bufname(i) == '' && getbufline(i, 1, 2) == ['']
Tenga en cuenta que bufexists()
se cambia a bufloaded()
aquí. Es necesario porque es posible obtener el contenido solo de los almacenamientos intermedios que están cargados (para los almacenamientos intermedios descargados getbufline()
devuelve lista vacía independientemente de su contenido).
Tenga en cuenta que el comando ': bufdo'-argument no debe agregar o eliminar almacenamientos intermedios (vea': help: bufdo'). –