Как я закрываю все буферы, которые не показывают в окне в энергии?

Вы могли использовать разность, чтобы видеть, ДЕЙСТВИТЕЛЬНО отличаются ли они.. Я предполагаю, что это удалит много бесполезного сравнения. Затем для алгоритма я использовал бы вероятностный подход.. что является возможностями, что они выглядят одинаково.. Я основывал это на сумме rgb в каждом пикселе. Вы могли также найти некоторые другие метрики, такие как яркость и наполнить как этот.

40
задан Drew Stephens 7 October 2009 в 23:47
поделиться

3 ответа

Вот альтернативное решение, которое вы можете добавить в свой .vimrc :

function! Wipeout()
  " list of *all* buffer numbers
  let l:buffers = range(1, bufnr('$'))

  " what tab page are we in?
  let l:currentTab = tabpagenr()
  try
    " go through all tab pages
    let l:tab = 0
    while l:tab < tabpagenr('$')
      let l:tab += 1

      " go through all windows
      let l:win = 0
      while l:win < winnr('$')
        let l:win += 1
        " whatever buffer is in this window in this tab, remove it from
        " l:buffers list
        let l:thisbuf = winbufnr(l:win)
        call remove(l:buffers, index(l:buffers, l:thisbuf))
      endwhile
    endwhile

    " if there are any buffers left, delete them
    if len(l:buffers)
      execute 'bwipeout' join(l:buffers)
    endif
  finally
    " go back to our original tab page
    execute 'tabnext' l:currentTab
  endtry
endfunction

Используйте : вызовите Wipeout () .

21
ответ дан 27 November 2019 в 01:45
поделиться

Добавьте это в свой .vimrc:

function! CloseHiddenBuffers()
  let i = 0
  let n = bufnr('$')
  while i < n
    let i = i + 1
    if bufloaded(i) && bufwinnr(i) < 0
      exe 'bd ' . i
    endif
  endwhile
endfun

Затем вы можете сделать это, чтобы закрыть скрытые буферы:

:call CloseHiddenBuffers()

(Вы, вероятно, захотите привязать к нему ключ или команду.)

Обновление:

Эта версия обновлена ​​для поддержки закладок. (Я сам не использую вкладки, поэтому я не понял, что bufwinnr работает только для окон на текущей странице).

function! CloseHiddenBuffers()
  " figure out which buffers are visible in any tab
  let visible = {}
  for t in range(1, tabpagenr('$'))
    for b in tabpagebuflist(t)
      let visible[b] = 1
    endfor
  endfor
  " close any buffer that's loaded and not visible
  for b in range(1, bufnr('$'))
    if bufloaded(b) && !has_key(visible, b)
      exe 'bd ' . b
    endif
  endfor
endfun
9
ответ дан 27 November 2019 в 01:45
поделиться

Я знаю, почему второй сценарий не работает.

Это связано с функцией bufloaded (), которая должна быть bufexits ()!

Действительно, буфер для удаления не загружен! Просто удалите это условие, но это дает некоторое предупреждение, когда мы пытаемся стереть неиспользуемый буфер, поэтому мы должны использовать bufexists (b).

Окончательное решение следующее:

function! CloseHiddenBuffers()
    " Tableau pour memoriser la visibilite des buffers                                                                                      
    let visible = {}
    " Pour chaque onglet...
    for t in range(1, tabpagenr('$'))
        " Et pour chacune de ses fenetres...
        for b in tabpagebuflist(t)
            " On indique que le buffer est visible.
            let visible[b] = 1
        endfor
    endfor
    " Pour chaque numero de buffer possible...
    for b in range(1, bufnr('$'))
        " Si b est un numero de buffer valide et qu'il n'est pas visible, on le
        " supprime.
        if bufexists(b) && !has_key(visible, b)
            " On ferme donc tous les buffers qui ne valent pas 1 dans le tableau et qui
            " sont pourtant charges en memoire.
            execute 'bwipeout' b
        endif
    endfor
endfun

Спасибо вам.

3
ответ дан 27 November 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: