Vim'de tek bir arabelleği (çoğundan) nasıl kapatabilirim?


445

Vim'de birkaç dosyayı örneğin çalıştırarak açıyorum

vim a/*.php

23 dosya açılır.

Daha sonra düzenlememi yaparım ve aşağıdakileri iki kez çalıştırırım

:q

bu da tüm tamponlarımı kapatıyor.

Vim'de yalnızca bir arabelleği nasıl kapatabilirsiniz?


9
Dosyaları kullanarak vim -o a/*.php(veya -Odikey pencereleri kullanarak) ayrı Vim pencerelerinde açabileceğinizi ve arabellek navigasyonundan kaçabileceğinizi unutmayın - bu sadece birkaç dosya için harika bir yöntemdir, ancak 23 dosyada sadece birkaç satır / sütun olacaktır her biri.
Cascabel

1
@Jefromi: Bunu işaret ettiğiniz için teşekkürler! Daha önce hiç -o seçeneğini kullanmadım.
Léo Léopold Hertz 준영

Pencere konusunda böler. Zaten Vim'deyseniz ve başka bir dosyayı split olarak açmak istiyorsanız: esp horizontal için: evsp for vertical.
Lanzafame

Yanıtlar:


558

Dikkatli bir kelime: "bw içindeki w yazma için değil, wipeout için!"

Kılavuzlardan daha fazlası:

: bd

Tamponu boşaltın [N] (varsayılan: geçerli tampon) ve tampon listesinden silin. Arabellek değiştirilirse, [!] Belirtilmediği sürece bu başarısız olur, bu durumda değişiklikler kaybolur. Dosya etkilenmez.

Ne yaptığınızı biliyorsanız, şunları da kullanabilirsiniz: bw

: bw

|: Bdelete | gibi, ancak arabelleği gerçekten silin.


4
Ayrıca yapmanın olasılığı: N. Or yakın tampon numaraları M 'M, NBD': 'bd N1 N2 ...' N # bir tampon sayıdır
snowbound

61
Kılavuzda sadece :bw"ne yaptığınızı biliyorsunuz" yazıyor , ki ben bilmiyorum, bu yüzden sanırım kullanacağım :bd.
jberryman

1
İlk başta bununla karıştırdım - tamponları kapatmak için yeni bir sekme açıyordum ... ancak sekmedeki arabelleği kapatmak (düz kullanarak :bd) sekmeyi de kapatır. Muhtemelen istediğiniz :bd n .. [m]veya :n,mbdbelirli sayıların veya sayıların kapanması için, arabelleklere bakmadan yapabileceğiniz
JonnyRaa

5
wwriteVim kılavuzuna göre komutun kısaltılmış halidir, ayrıca herhangi bir "silme" den bahsedilmez. Komutun ( help write) açıklaması "Tüm arabelleği geçerli dosyaya yaz" ile başlar.
amn

3
@amn ben de karıştı, ama kastettiği wde bwonun hakkında konuşmuyor ortadan kaldırma komut vasıtası wkomutu. Bu uyarıyı oraya koydu, böylece insanlar bwkomutun tampon yazma anlamına gelmediğini düşünmedi (bu, tampon silme anlamına gelmez.)
John

351

Bu, önceki cevaplar tarafından açıkça belirtilmemişse:

: bd geçerli arabelleği kapatır. Eğer arabellek listesini almak istemiyorsanız.


4
Bulmadan önce: bd insanların bana hiçbir sorun yaşamadığını anlamam hiç mantıklı değildi: ls -> doc numarasını tara -> tamponu sayıya göre kaldır. İnsanlar bunu gerçekten etkili buluyor mu?
Svend

3
Bir dizi arabellek için @svend, ancak yalnız bir kişi için a: bd muhtemelen daha etkilidir.
Pharaun


10
:bdyalnızca tamponu kapatır (bunun anlamı ne olursa olsun) :bwtüm değişkenleri de temizler ve GERÇEKTEN lsarabellekten kaldırır .
RedX

1
hhh aşağıdaki cevap daha ayrıntılı ...

103

Arabellek kimliğinizi kullanarak kontrol edin:

orada gibi tamponların listesini göreceksiniz

1  a.php
2  b.php
3  c.php

tampondan b.php kaldırmak istiyorsanız

:2bw

tüm arabellekleri kaldırmak / kapatmak istiyorsanız

:1,3bw

4
Ayrıca tüm tamponları ile silebilirsiniz:% bw
cdleonard

7
arabellek kimliğini kontrol etmek için kısa yol: 2 CTRL-G
gruba bağlı

43

: Ls komutunun çıkışına göz atmak yerine, numarasını belirterek bir arabelleği silme (silme, silme ...) yerine, dosya adlarını kullanmanın genellikle daha etkili olduğunu buluyorum.

Örneğin, ben .txt birkaç dosya açtıktan sonra bazı ince nokta anılarımı yenilemek için .. kopyalayın ve bir tür şablon olarak kullanmak için metin birkaç satır yapıştırın .. vb. Ben aşağıdakini yazın:

:bd txt <Tab>

Eşleşen dizenin dosya adının başında olması gerekmediğini unutmayın.

Yukarıda, ekranın altındaki 'txt' ile eşleşen dosya adlarının listesi görüntülenir ve başlangıçta dokunulmamış olarak yazdığım: bd komutunu tamamlanmaya hazır tutar.

İşte bir örnek:

doc1.txt doc2.txt
:bd txt 

'Txt' biti üzerinde geri alabilir ve silmek istediğim dosya adını yazabilirim, ancak bu gerçekten uygun hale geldiğinde şunu yapmak zorunda değilim: Sekme tuşuna ikinci kez basarsam, Vim otomatik olarak komutumu tamamlar ilk maçta:

:bd doc1.txt

Bu tampondan kurtulmak istiyorsam Enter tuşuna basmam gerekiyor.

Ve silmek istediğim arabellek ikinci (üçüncü .. vb.) Eşleşme olursa, sadece eşleşmeler listesinde my: bd komut döngüsünü yapmak için Tab tuşuna basmaya devam etmem gerekir.

Doğal olarak, bu yöntem ayrıca aşağıdaki gibi komutlar aracılığıyla belirli bir tampona geçmek için de kullanılabilir: b ..: sb .. vb.

Bu yaklaşım özellikle 'gizli' Vim seçeneği ayarlandığında kullanışlıdır, çünkü arabellek listesi hızla büyüyebilir, birkaç ekranı kaplayabilir ve aradığım belirli arabelleği bulmayı zorlaştırabilir.

Bu özellikten en iyi şekilde yararlanmak için, muhtemelen aşağıdaki Vim yardım dosyasını okumak ve Tab komut satırı tamamlama davranışını buna göre ayarlamak, böylece iş akışınıza en iyi şekilde uymak en iyisidir:

:help wildmode

Yukarıda tarif ettiğim davranış, bash tamamlanmasını taklit etmek için tutarlılık uğruna seçtiğim aşağıdaki ayardan kaynaklanıyor:

:set wildmode=list:longest,full

Arabellek numaralarını kullanmanın aksine, bu yaklaşımın değeri, genellikle: ls komutu ile numarasını aramak zorunda kalmadan, doğrudan arabelleği hedeflememe izin veren belirli bir dosya adının en azından bir kısmını hatırlıyorum.


40

kullanın:

  • :ls - arabellekleri listelemek
  • :bd#n- arabelleği kapatmak için #n tampon numarasıdır ( lsalmak için kullanın )

Örnekler:

  • tampon 2'yi silmek için:

    :bd2
    

16

Sonraki ve önceki işlev tuşlarını da eşleştirerek arabelleklerde bisiklet sürmeyi kolaylaştır

map <F2> :bprevious<CR>
map <F3> :bnext<CR>

vimrc'imden


2

Peki ya

vim -O a a

Bu şekilde solunuzdaki tek bir dosyayı düzenleyebilir ve sağınızdaki tüm dizinde gezinebilirsiniz ... Sadece bir düşünce, çözüm değil ...


2

[EDIT: Bu, Vim'i yeterince tanımadığım bir zamandan beri aptalca bir öneriydi. Lütfen arabellek yerine sekme kullanmayın; sekmeler Vim'in "pencere düzenleri" dir]

Sekmeleri kullanmaya geçebilir misiniz?

vim -p a/*.php aynı dosyaları sekmelerde açar

gtve gTsekmeleri ileri geri değiştirme

:q yalnızca geçerli sekmeyi kapatır

:qa her şeyi kapatır ve çıkar

:tabo geçerli sekme hariç her şeyi kapatır


2
Neden sekmeler kullanmanın aptalca bir öneri olduğunu söylüyorsun? Sadece sekmeler kullandığım için soruyorum ...: ^ /
Nate


1
Bu harika bir yazıydı - daha derine inmemi sağladı - baktın wildmenumı? Lustyjuggler'a (daha basit olsa da) benzer, ancak yerleşiktir (bu benim için iyi, çünkü lustyjuggler'in ihtiyacı var +rubyve ubuntu oneiric gemileri için varsayılan vim -ruby).
Nate

@Nate: evet, dosyaları açmak için wildmenu kullanıyorum, ancak projede çok fazla dosya olduğunda, ölçeklenmiyor. Ayrıca, vim-noxUbuntu paketinin Ruby desteği var.
Leonid Shevtsov

1

Buffergator veya NERDTree gibi bir tampon veya ağaç gezinme eklentisi kullananlar, mevcut arabelleği yok etmeden önce bu bölmeleri değiştirmelidir - aksi takdirde bölmelerinizi wonkyville'e gönderirsiniz

Kullanırım:

"" Buffer Navigation                                                                                                                                                                                        
" Toggle left sidebar: NERDTree and BufferGator                                                                                                                                                             
fu! UiToggle()                                                                                                                                                                                              
  let b = bufnr("%")                                                                                                                                                                                        
  execute "NERDTreeToggle | BuffergatorToggle"                                                                                                                                                              
  execute ( bufwinnr(b) . "wincmd w" )                                                                                                                                                                      
  execute ":set number!"                                                                                                                                                                                    
endf                                                                                                                                                                                                        
map  <silent> <Leader>w  <esc>:call UiToggle()<cr>   

NERDTreeToggleBu listedeki " " yazmakla yazmak aynıdır :NERDTreeToggle. Bu işlevi kendi yapılandırmanızla entegre olacak şekilde değiştirebilirsiniz.


Bunun için, bbye eklentisi :bdeleteveya kullanırken pencere düzeninizi koruyan mükemmeldir :bwipeout. Cevabımı gör .
Wolfson

0

Pencereyi kapatmadan arabelleği kapat

Pencere düzeninizi (bölmelere dayalı geçerli düzen) yok etmeden bir arabelleği kapatmak istiyorsanız, bbye gibi bir Eklenti kullanabilirsiniz . Buna dayanarak,

:Bdelete (instead of :bdelete)
:Bwipeout (instead of :bwipeout)

Veya yalnızca .vimrcdaha kolay erişim için bir eşleme oluşturun.

:nnoremap <Leader>q :Bdelete<CR>

VIM'lere göre avantaj: bdelete ve: bwipeout

Gönderen eklentilerin sayfalarına :

  • Tamponu kapatın ve çıkarın.
  • O pencerede başka bir dosya göster.
  • Açık başka bir dosyanız yoksa boş bir dosya gösterin.
  • Bu pencerede başka bir dosyayı düzenlemeye karar verirseniz işe yaramaz [dosya yok] arabellekleri bırakmayın.
  • Bir dosya birden çok pencerede açık olsa bile çalışır.
  • Çeşitli arabellek kaşıkları ve sekme çubukları ile sorunsuz çalışın.

: bdelete vs: bwipeout

Gönderen eklentilerin sayfalarına :

Vim'de bir arabelleği kapatmak için iki komut vardır: :bdeleteve :bwipeout. Birincisi dosyayı arabellek listesinden kaldırır, seçeneklerini, değişkenlerini ve eşlemelerini temizler. Ancak, atlama listesinde kalır, bu yüzden Ctrl-osizi geri alır ve dosyayı yeniden açar. İstediğiniz bu değilse, :bwipeoutya da kullandığınız :Bwipeoutyerde Bbye eşdeğerini kullanın :bdelete.

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.