Как я могу удалить все скрытые буферы? - PullRequest
19 голосов
/ 09 декабря 2011

Мне нравится запускать Vim с 'hidden'.Иногда, однако, у меня много скрытых буферов, и я хотел бы убить их всех.Какую команду я могу использовать для :bdelete каждого скрытого буфера в списке буферов?

Ответы [ 6 ]

21 голосов
/ 10 декабря 2011

Попробуйте следующую функцию:

function DeleteHiddenBuffers()
    let tpbl=[]
    call map(range(1, tabpagenr('$')), 'extend(tpbl, tabpagebuflist(v:val))')
    for buf in filter(range(1, bufnr('$')), 'bufexists(v:val) && index(tpbl, v:val)==-1')
        silent execute 'bwipeout' buf
    endfor
endfunction
5 голосов
/ 10 декабря 2011

Это немного отличается от ранее опубликованной функции принца Гуляша. Код не проверен. Он использует функцию для анализа вывода команды :buffers, которая включает маркер 'h' для скрытых буферов. Примерно так:

function! DeleteHiddenBuffers()
    redir => buffersoutput
    buffers
    redir END
    let buflist = split(buffersoutput,"\n")
    for item in filter(buflist,"v:val[5] == 'h'")
            exec 'bdelete ' . item[:2]
    endfor
endfunction
4 голосов
/ 07 мая 2015

Расширенная версия ответа @ ZyX , которая пропускает измененные буферы и выводит количество буферов, которые были закрыты.

function! DeleteHiddenBuffers()
  let tpbl=[]
  let closed = 0
  call map(range(1, tabpagenr('$')), 'extend(tpbl, tabpagebuflist(v:val))')
  for buf in filter(range(1, bufnr('$')), 'bufexists(v:val) && index(tpbl, v:val)==-1')
    if getbufvar(buf, '&mod') == 0
      silent execute 'bwipeout' buf
      let closed += 1
    endif
  endfor
  echo "Closed ".closed." hidden buffers"
endfunction
1 голос
/ 10 декабря 2011

bufexplorer.vim может управлять вашими буферами vim. Здесь для загрузки .Вы можете использовать :BufExplorer, чтобы показать все свои буфера vim в окне.И нажмите «d», чтобы удалить его.

0 голосов
/ 28 апреля 2014

Вот что я использую:

:bufdo bd

Нет необходимости в плагинах или чем-либо.

0 голосов
/ 10 декабря 2011

Это не полностью проверено, поэтому сначала используйте его осторожно!

function! DeleteHiddenBuffers()
    let i=1
    let lastbuf=bufnr("$")
    while i <= lastbuf
        if buflisted(i) && bufwinnr(i) == -1
        sil exe "bdelete" i
        endif
        let i=i+1
    endwhile
endfunction

Примечание buflisted проверяет, существует ли буфер, и bufwinnr возвращает -1, если он скрыт (то есть не имеет назначенного окна). Вы можете позвонить, используя

call DeleteHiddenBuffers()

или создайте отображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...