Vim: закройте все буферы, кроме этого - PullRequest
162 голосов
/ 28 декабря 2010

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

Ответы [ 11 ]

145 голосов
/ 16 апреля 2015

Попробуйте это

bufdo bd

Команда запуска bufdo для всех буферов

http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers

87 голосов
/ 06 февраля 2017

Я смог сделать это довольно легко, как это:

:%bd|e#
56 голосов
/ 28 декабря 2010

Вы можете использовать этот скрипт с 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

55 голосов
/ 17 января 2014

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

1,100bd
46 голосов
/ 02 декабря 2015

Я делаю это

:w | %bd | e#

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

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

25 голосов
/ 06 июня 2014

Опираясь на ответ juananruiz.

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

:1,1000bd

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

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

13 голосов
/ 07 сентября 2012

Используя

:on[ly][!]

и

:h only
9 голосов
/ 16 июня 2016

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

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>
4 голосов
/ 27 сентября 2017

Есть плагин , который делает именно это и немного больше!

Проверьте close-buffers.vim

0 голосов
/ 30 марта 2017

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

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

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

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

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