Мне нравится запускать Vim с 'hidden'
on. Иногда, однако, у меня много скрытых буферов, висящих вокруг, и я бы хотел их убить. Какую команду я могу использовать для :bdelete
каждого скрытого буфера в списке буфера?
Как удалить все скрытые буферы?
Ответ 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
Нет необходимости в плагинах или что-то в этом роде.