Відповіді:
Ви можете використовувати цей скрипт від vim.org:
http://www.vim.org/scripts/script.php?script_id=1071
Просто помістіть його у свій .vim/pluginкаталог, а потім скористайтесь :BufOnlyкомандою, щоб закрити всі буфери, крім активного. Ви також можете його скласти в іншому місці .vimrc.
Джерело в Github (через дзеркало vim-script): 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#щоб видалити буфер [No Name], який створюється під час використання %bd.
Труба між ними виконує лише одну команду за іншою. Ви повинні уникнути цього, хоча використовуючи\|
'" = зберегти моє курсорне положення.
Мені подобається 1,100bd( запропонував juananruiz ), який, здається, працює на мене.
Я додав quit!до свого картографування, щоб дати мені
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
Це вбиває всі буфери і вимикає Vim, що саме я шукав здебільшого.
bdqвідображення, яке закриває всі буфери та виходить з vim :q!, коли замість цього ви можете просто використовувати :qa!. Якщо я щось не