Vim: Закройте все буферы, но этот

Как закрыть все буферы в Vim, кроме тех, которые я сейчас редактирую?

Ответ 1

Вы можете использовать этот script из vim.org:

http://www.vim.org/scripts/script.php?script_id=1071

Просто поместите его в свой каталог .vim/plugin, а затем используйте команду :BufOnly, чтобы закрыть все буферы, кроме активного. Вы также можете отобразить его в другом месте, которое вам нравится, в .vimrc.

Источник на Github (через зеркало vim-scripts): https://github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim

Ответ 3

Мне удалось сделать это довольно легко:

:%bd|e#

Ответ 4

Если вам не нравится текущий, проще сделать что-то вроде (без script):

1,100bd

Ответ 5

Я делаю это

:w | %bd | e#

Мой любимый, если я просто хочу, чтобы мой текущий буфер открывал и закрывал все остальные.

Как это работает: сначала напишите текущие изменения буфера, затем закройте все открытые буферы, затем снова запустите буфер, в который я был включен. В Vim цепочка | объединяет выполнение команд. Если ваш буфер обновлен, это можно сократить до :%bd | e#

Ответ 6

Основываясь на ответе juananruiz.

Сделайте небольшое изменение в буфере, который вы хотите сохранить, затем

:1,1000bd

Команда bd (удаление буфера) не удалит буферы с несохраненными изменениями. Таким образом, вы можете сохранить текущий (измененный) файл в списке буферов.

Изменить: Обратите внимание, что это также приведет к удалению вашего NERDTreeBuffer. Вы можете вернуть его с помощью: NERDTree

Ответ 7

Используя

:on[ly][!]

и

:h only

Ответ 8

Закрытие всех открытых буферов:

silent! execute "1,".bufnr("$")."bd"

Закрытие всех открытых буферов , за исключением текущего:

function! CloseAllBuffersButCurrent()
  let curr = bufnr("%")
  let last = bufnr("$")

  if curr > 1    | silent! execute "1,".(curr-1)."bd"     | endif
  if curr < last | silent! execute (curr+1).",".last."bd" | endif
endfunction

Добавьте эту функцию в .vimrc и вызовите ее с помощью :call CloseAllBuffersButCurrent().

Карта удобства:

nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>

Ответ 9

Там плагин, который выполняет именно это и немного больше!

Отъезд close-buffers.vim

Ответ 11

Мне нравится 1,100bd (предложенный juananruiz), который, похоже, работает для меня.

Я добавил quit! к моему отображению, чтобы дать мне

nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>

Это убивает все буферы и отключает Vim, чего я искал в основном.