Vim: Bu Tamponları Kapat


Yanıtlar:



171

Bunu dene

bufdo bd

bufdo tüm arabellekler için komut çalıştırır

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


Bu NERDTree arabelleğini kapatmaz.
Uri

2
Komutun vim'in bdkendisini kapatmasını önlemek için bunu yapmadan önce NERDTree'yi kapatmak isteyebilirsiniz ; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>.
lvarayut

11
Belgeler, :bufdo'arabellekleri silmemeli veya arabellek listesine arabellek eklememelidir' argümanı konusunda uyarır . Bu çözüm işe yararsa, kazara çalışır… ve genellikle benim için işe yaramaz (farklı bir tampona geçer).
16:54

10
Bu benim için tüm tamponları kapatır, bu soruların sorduğu şey değildir. (MacVim sürüm 8.0.1207)
Michael Leonard

1
Bu komut tüm arabellekleri kapatır. Mevcut olanı nasıl açık bırakabilirim?
h-rai

145

Bunu oldukça kolay bir şekilde yapabildim:

:%bd|e#

4
Bu güzel bir cevap. BufOnly'nin argüman aktarma özelliğini kullanmıyorsanız, BufOnly'ı biraz abartılı hissettirir (yani, bir bütün eklenti?). Gerçekten yapmak istediğim tek şey:%bd|e#
shmup

42
@jorgeh %bd= tüm arabellekleri sil. e#= düzenleme için son arabelleği aç. Aradaki boru sadece bir komutu birbiri ardına yapar.
OldTimeGuitarGuy

20
@Jared Oluşturulan arabelleği %bd|e#|bd#silmek için kullanabilirsiniz [No Name].
kshenoy

12
Olağanüstü. O zaman burada BufOnly eklentisini kullandığım, tek bir komutla damıtılmış tek şeyim var:command! BufOnly silent! execute "%bd|e#|bd#"
shmup

4
@Finn'den kaçman gerekiyor |:map <leader>o :%bd\|e#<cr>
Halil Özgür

57

Mevcut olanı umursamıyorsanız, böyle bir şey yapmak daha basittir (komut dosyası gerekmez):

1,100bd

4
Nerdtree tamponunu da kapatacaktır.
Afshin Mehrabani

NERDTree etkinleştirildiğinde bu komutu kullanırken bazı sorunlarla karşılaştım. @VoY tarafından belirtildiği gibi BufOnly.vim eklentisini kullanarak öneriyorum.
moeabdol

1
Ben NERDTree arabellek silmek için hangi hesapları aşağıdaki haritalama yaptım:nnoremap <leader>bd :%bd | NERDTree<cr>
Uri

5
Bunu uzun süre kullandım, ama şimdi anladım, E16: Invalid rangeçünkü aralıktaki bazı tamponlar aslında mevcut değil. Yakın zamana kadar bunu görmezden geliyordu.
Jon

3
@Jon :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.
Nairou

51

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#


Çoğunlukla iyi çalışıyor. ancak bazen %tüm seçici olarak çalışamaz. Bir şey tahmin edebilir misin?
Jinyoung Kim

@JinyoungKim ([1] 'den itibaren) ":% bd" komutunda,'% 'aralığı geçerli arabellekteki başlangıç ​​ve bitiş satır numaraları ile değiştirilir. Aralık olarak '%' kullanmak yerine aralık için sayılar belirtmelisiniz. Örneğin, tüm arabellekleri silmek için ": 1,9999bd" [1] vimdoc.sourceforge.net/cgi-bin/vimfaq2html3.pl#8.8
iamnotsam

Belgeye yeni baktım. Peki, '%' aralığı bir dizi geçerli dosya satırına mı bağlı?
Jinyoung Kim

2
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.
Jinyoung Kim

2
: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.
Alejandro

26

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


Mükemmel, kısa ve basit! :)
arkod

50
:% bd aslında 1-1000 yerine "hepsi" dir.
John Tyree

Bu set nohiddenayarlanmaya dayanıyor mu ?
Felipe Alvarez

15

Kullanarak

:on[ly][!]

ve

:h only

29
Bu, arabellekleri değil pencereleri kapatır.
ZyX

13
Yine de yararlıdır, çünkü insanlar yanlış terim için Google'ı iyi değerlendirebilir ve bulacaktır. İkinize de teşekkürler. :)
Archgoon

1
@archgoon evet, ama cevapta belirtilmelidir.
andho

10

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>

Tamponları geri yükleyen vim oturumlarına devam ederken, yukarıdakileri kullanarak artık tamponları kaldıramadığımı fark ettim. Bunun yerine, kullanmak zorunda kaldım:%bd|e#|bd#
shmup

En iyi çözüm. NERDTreenmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Gjaa

6

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



1

İş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.


0

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.


1
Bunun yerine, yalnızca bdqarabellekleri kapatan ve vim'den çıkan eşleştirmeye sahip olmanız için hiçbir neden yoktur . Bir şeye :q!:qa!
bakmadığım

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.