Подтвердить что ты не робот

Как удалить все скрытые буферы?

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

4b9b3361

Ответ 1

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

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

Ответ 2

Вот немного отличается от ранее опубликованной функции принца Гулаша. Код не проверен. Он использует функцию для синтаксического анализа вывода команды :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

Ответ 3

Расширенная версия ответа @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

Ответ 4

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

Ответ 5

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

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()

или создать сопоставление.

Ответ 6

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

:bufdo bd

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