Yanıtlar:
Bu betiği vim.org adresinden kullanabilirsiniz:
http://www.vim.org/scripts/script.php?script_id=1071
Sadece .vim/plugindizininize koyun :BufOnlyve aktif olan hariç tüm arabellekleri kapatmak için komut kullanın. Ayrıca, istediğiniz yerde başka bir yerde eşleyebilirsiniz .vimrc.
Github'da kaynak (vim-scripts mirror aracılığıyla): https://github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim
Bunu dene
bufdo bd
bufdo tüm arabellekler için komut çalıştırır
bdkendisini kapatmasını önlemek için bunu yapmadan önce NERDTree'yi kapatmak isteyebilirsiniz ; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>.
Bunu oldukça kolay bir şekilde yapabildim:
:%bd|e#
:%bd|e#
%bd= tüm arabellekleri sil. e#= düzenleme için son arabelleği aç. Aradaki boru sadece bir komutu birbiri ardına yapar.
%bd|e#|bd#silmek için kullanabilirsiniz [No Name].
command! BufOnly silent! execute "%bd|e#|bd#"
|:map <leader>o :%bd\|e#<cr>
Mevcut olanı umursamıyorsanız, böyle bir şey yapmak daha basittir (komut dosyası gerekmez):
1,100bd
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid rangeçünkü aralıktaki bazı tamponlar aslında mevcut değil. Yakın zamana kadar bunu görmezden geliyordu.
:lsGerçekten açık olan en büyük arabelleği görmek için kontrol edin ve aralığınızı buna ayarlayın (yani en yüksek arabelleğiniz 22 ise :1,22bd). Bunu yapana kadar aynı hatayı aldım.
Bunu yaparım
:w | %bd | e#
Sadece şu anki arabelleğimin diğerlerini açıp kapatmasını istiyorum.
Nasıl çalışır: önce geçerli arabellek değişikliklerini yazın, sonra tüm açık arabellekleri kapatın, ardından şu anda üzerinde olduğum arabelleği yeniden açın. Vim'de |zincirler komutların birlikte yürütülmesini sağlar. Arabelleğiniz güncelse, yukarıdakiler kısaltılabilir:%bd | e#
%tüm seçici olarak çalışamaz. Bir şey tahmin edebilir misin?
bufnr("$")Son arabellek numarasını döndüren yerleşik işlev buldum . ama böyle kullandığımda dize enterpolate etmek için hiçbir fikrim yok :1,bufnr("$")bd. Belki .. en iyi çözüm olurdu :1,9999bd.
:help :bdgösterir :%bdelete " delete all buffers. Yani %ne istediğinizi tam olarak budur. Çözümünüzün bir varyantını kullanıyorum: :%bd<CR><C-O>:bd#<CR>Bu, tüm arabellekleri silecek, ardından <C-O>geçerli dosyadaki konumu geri yüklemek için, ardından :bd#adlandırılmamış arabelleği kaldırmak için kullanılacak. Bu, tüm arabellekleri kapatır ve sizi dosyada aynı konumda bırakır.
Juananruiz'in cevabı üzerine inşa.
Saklamak istediğiniz arabellekte küçük bir değişiklik yapın, ardından
:1,1000bd
Komuta bd (arabellek silme) kaydedilmemiş değişikliklere sahip arabellekleri silmez. Bu şekilde, geçerli (değiştirilmiş) dosyayı arabellek listesinde tutabilirsiniz.
Düzenleme: Lütfen bunun NERDTreeBuffer'ınızı da sileceğini unutmayın. Şununla geri alabilirsiniz: NERDTree
set nohiddenayarlanmaya dayanıyor mu ?
Tüm açık arabelleklerin kapatılması:
silent! execute "1,".bufnr("$")."bd"
Geçerli olan dışındaki tüm açık arabelleklerin kapatılması :
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
Bu işlevi ekleyin .vimrcve ile çağırın :call CloseAllBuffersButCurrent().
Kolaylık haritası:
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Bunu .vimrc dosyama koydum
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
o zaman leader + ca(tümünü kapat) geçerli olan hariç tüm arabellekleri kapatır.
Yaptığı şey
: w - geçerli arabelleği kaydet
% bd - tüm arabellekleri kapat
e # - son düzenlenmiş dosyayı aç
bd # - isimsiz arabelleği kapat
Bir eklenti varTam olarak bunu ve biraz daha fazlasını yapan var!
Check out yakın buffers.vim
İşte yaptığım şey. Bu yüzden, tüm tamponları kaldırdıktan sonra imlecimin konumunu korumak istiyorum ve yukarıdaki çözümlerin çoğu bu gerçeği görmezden geliyor. Ayrıca komutu yeniden yazmanın daha iyi olduğunu düşünüyorum, bu yüzden Burada <leader>bdtüm tamponları kaldırmak ve orijinal imleç konumuma atlamak için kullanıyorum.
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd = tüm arabellekleri sil.
e# = düzenleme için son arabelleği aç (Üzerinde çalıştığım tampon nedir).
bd#kullandığınızda oluşturulan [Adsız] arabelleğini silmek için %bd.
Aradaki boru sadece bir komutu birbiri ardına yapar. Kullanarak kaçmalısın\|
'" = imleç konumumu koru.
Benim için çalışıyor gibi görünüyor 1,100bd( juananruiz tarafından önerilen ) seviyorum .
Haritama ekledim quit!ve bana verdim
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
Bu, tüm arabellekleri öldürür ve çoğunlukla aradığım şey olan Vim'i kapatır.
bdqarabellekleri kapatan ve vim'den çıkan eşleştirmeye sahip olmanız için hiçbir neden yoktur . Bir şeye :q!:qa!
Peki ya:
ctrl-w o
( https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally sayesinde )