Відповіді:
Ви можете використовувати цей скрипт від 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!
. Якщо я щось не