Wednesday, July 11, 2012

Re: Cleaning up the buffer list

On 7/11/2012 7:38 PM, Chris Jones wrote:
> Ping's question a few hours ago reminded me of something I keep putting
> off.
>
> I usually have a single Vim instance that stays up for weeks if not
> months at a time, such that I eventually have a large number of buffers
> as listed by the ':ls/:buffers' command.. well over 100 at this point in
> time. Even though I usually take good care to exit files once I know
> I will no longer need them (via a ':q/:wq').
>
> I took a look at buffer-oriented functions and could no see anything at
> a glance that looked like it might help, so I put together the following
> 'prototype' :-) mostly to verify that I understand the problem:
>
> | function! GarCol()
> |
> | redir @x
> | exe ':silent ls'
> | redir end
> | let mybuffers = @x
> | let mbfl = split(mybuffers, '\n')
> | for bf in mbfl
> | let bfl = split(bf, ' ')
> | echo bfl
> | if bfl[1] =~ '.a'
> | echo 'skipped %a or #a buffer'
> | continue
> | endif
> | if bfl[2] =~ 'a'
> | echo 'skipped active buffer'
> | continue
> | endif
> | if bfl[3] =~ '+'
> | echo 'skipped modified buffer'
> | continue
> | endif
> | echo bfl[0] ' will be deleted'
> | let bfd = bfl[0]
> | exe "bw"." ".bfd
> | " exe "bun"." ".bfd
> | endfor
> | return 0
> | endfunction
>
> What this does is feed the output of the :ls command to a variable and
> filter out buffers that are either 'active' (displayed in a window) or
> 'modified'. All others get buffer-wiped.
>
> I quickly fired up a Vim session and populated it with test files, and
> the above appears to work as I intended, but what bothers me is that
> it's based on the output of a command meant for interactive use.
>
> Among other things, the current format is not written in stone & more
> subject to change than return values from Vim functions...
>
> Besides, it's based on what I see when I issue the ':buffers' command,
> and for all I know, there may be cases where an extra column is added in
> the output, (e.g.) so that my list indexing would point to something
> else than the flags I was looking for causing unpredictable results.
>
> No big deal of course, since it's only Vim buffers I am throwing away,
> not files.. but could be annoying all the same.
>
> Has anyone looked into buffer list manipulation before and could advise
> on a different approach & suggest how I might be able to come up with
> something a bit less clunky..?
>
> Thanks,
>
> CJ
>

besides other things, b.t.w, the :
:bdelete and :bwipeout
should help cleaning closed buffers (means files closed by :q) out.
just FYI.

--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

No comments: