Ответы:
Вы можете использовать этот скрипт с 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
Попробуй это
bufdo bd
bufdo запускает команду для всех буферов
bdкоманда не закрывала сам vim; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>,
Я смог сделать это довольно легко, как это:
:%bd|e#
:%bd|e#
%bd= удалить все буферы. e#= открыть последний буфер для редактирования. Труба между ними просто выполняет одну команду за другой.
%bd|e#|bd#чтобы удалить [No Name]созданный буфер.
command! BufOnly silent! execute "%bd|e#|bd#"
|:map <leader>o :%bd\|e#<cr>
Если вам плевать на текущий, проще сделать что-то вроде (сценарий не нужен):
1,100bd
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid rangeпотому что некоторые из буферов в диапазоне фактически не существуют. До недавнего времени это игнорировалось.
:lsчтобы увидеть самый большой буфер, который у вас есть на самом деле, и установите для него диапазон (т. Е. Если ваш самый высокий буфер равен 22, тогда :1,22bd). Я получил ту же ошибку, пока я не сделал это.
я сделаю это
:w | %bd | e#
Мой любимый, если я просто хочу, чтобы мой текущий буфер открывал и закрывал все остальные.
Как это работает: сначала запишите изменения в текущем буфере, затем закройте все открытые буферы, затем снова откройте буфер, в котором я был в данный момент. В Vim |цепочки выполнения команд вместе. Если ваш буфер обновлен, вышеприведенное может быть сокращено до:%bd | e#
%не может работать как весь селектор. Можете ли вы угадать что-нибудь?
bufnr("$")которая возвращает последний номер буфера. но я понятия не имею, интерполировать в строку, когда я использую, как это :1,bufnr("$")bd. Может быть .. лучшее решение будет :1,9999bd.
:help :bdпоказывает :%bdelete " delete all buffers. Так %что именно то, что вы хотите. Я использую вариант вашего решения: :%bd<CR><C-O>:bd#<CR>это удалит все буферы, затем используйте, <C-O>чтобы восстановить позицию в текущем файле, затем :bd#удалить неиспользованный буфер. Это закроет все буферы и оставит вас в том же месте в файле.
Опираясь на ответ juananruiz.
Сделайте небольшое изменение в буфере, который вы хотите сохранить, затем
:1,1000bd
Команда bd(удаление буфера) не удалит буферы с несохраненными изменениями. Таким образом, вы можете сохранить текущий (измененный) файл в списке буферов.
Изменить: Обратите внимание, что это также удалит ваш NERDTreeBuffer. Вы можете получить его обратно: NERDTree
set nohiddenчтобы быть установленным?
Закрытие всех открытых буферов:
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>
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Я положил это в мой файл .vimrc
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
тогда вы leader + ca(закройте все) закроете все буферы, кроме текущего.
Что это делает
: w - сохранить текущий буфер
% bd - закрыть все буферы
e # - открыть последний отредактированный файл
bd # - закрыть безымянный буфер
Есть плагин, который делает именно это и немного больше!
Проверьте close-buffers.vim
Вот что я делаю. Поэтому мне нравится сохранять свою позицию курсора после удаления всех буферов, и большинство решений выше просто игнорирует этот факт. Я также думаю, что переназначить команду лучше, чем вводить ее, поэтому здесь я использую, <leader>bdчтобы удалить все буферы и вернуться к исходной позиции курсора.
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd = удалить все буферы.
e# = открыть последний буфер для редактирования (это буфер, над которым я работаю).
bd#удалить буфер [Без имени], который создается при использовании %bd.
Труба между ними просто выполняет одну команду за другой. Вы должны избежать этого, используя\|
'" = сохранить мою позицию курсора.
Мне нравится 1,100bd( предложенный juananruiz ), который, кажется, работает для меня.
Я добавил quit!в свое отображение, чтобы дать мне
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
Это убивает все буферы и отключает Vim, что я и искал в основном.
bdqотображение, которое закрывает все буферы и выходит из vim :q!, когда вместо этого вы можете просто использовать :qa!. Если только я не пропускаю что-то
Как насчет просто:
ctrl-w o
(спасибо https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally )