Vim'in sekmelerini arabellek gibi kullanma


366

Gizli arabelleklerde aynı pencerede açık birçok dosya var benim mevcut uygulama yerine Vim (ile :tabe, :tabnewvb) sekmeleri kullanma yeteneği baktım .

Açık olduğum her farklı dosyanın her zaman kendi sekmesinde olmasını istiyorum. Ancak, bunun önüne geçen bazı şeyler var. Bunları nasıl düzeltebilirim:

  1. Komutlar başka bir dosyadaki bir konuma benzediğinde gfve ^]bu konuma atladığında, dosya geçerli sekmedeki yeni bir arabellekte açılır. Tüm bu tür komutların dosyayı yeni bir sekmede açmasının veya zaten açıksa dosyayla mevcut sekmeye geçmenin bir yolu var mı?

  2. Arabellekleri değiştirirken kullanabilirim :b <part of filename><tab> ve mevcut tamponlardaki dosyaların isimlerini tamamlayacaktır. <part of filename>hatta dosya adının başlangıcı yerine ortasında olabilir. Sekmeleri değiştirmek için bir eşdeğer var mı?

Yanıtlar:


642

Dur dur dur.

Vim'in sekmeleri bu şekilde kullanılmak üzere tasarlanmamıştır. Aslında, isimleri yanlış. Bir sekme ne anlama en is-it pencerelerinin farklı bir düzen çünkü daha iyi bir isim, "görünüm" veya "düzen" olacağını tüm mevcut tamponların.

Vim'i 1 sekme == 1 tamponuna geçmeye çalışmak boşuna bir egzersizdir. Vim bilmek ya da bakım ve tüm komutların-in QuickFix tamponu (kullanan özellikle, bir şey buna saygı ermiyorsa :make, :grepve :helpgrepmutlulukla sekmeleri göz ardı eder akla bahar o olanlardır) ve durdurmak için yapabileceği hiçbir şey yok söyledi.

Yerine:

  • :set hidden
    Bu kümeye sahip değilseniz, bunu yapın. Vim'i gezegendeki diğer tüm çoklu dosya düzenleyicileri gibi çalıştırır. Bir yerde bir pencerede görünmeyen arabellekleri düzenleyebilirsiniz.
  • Kullanım :bn, :bp, :b #, :b name, ve ctrl-6tampon arasındaki anahtara. Kendimi seviyorum ctrl-6(yalnız daha önce kullanılan ara belleğe #ctrl-6geçer veya arabellek numarasına geçer #).
  • :lsTamponları veya MiniBufExpl veya BufExplorer gibi bir eklentiyi listelemek için kullanın .

192
Bana göre bu bir hata, "kullanıcı hatası" değil. Web'de "vim sekmeleri" araması, hemen hemen herkesin sizinle aynı fikirde olmadığını veya Vim sekmelerini kullanmanın "gerçek" yolundan habersiz olduğunu gösterir. Ayrıca, sekmeler gerçekten "düzen" görünümüyse, neden varsayılan sekme başlıkları, geçerli dosya adıdır? Aynı dosyanın birden çok görünümünü isteseydim, tüm sekmelerim aynı isimde olurdu (çok yararlı değil mi?). Her iki şekilde de baktığınızda, Vim'deki varsayılan sekme uygulaması kusurludur.
cmcginty

45
Sekme başlığında başka neler göstereceksiniz? Geçerli arabellek adını gösterir ("dosya adı" değil). Sekme başlığında nelerin görüntüleneceğini yine de değiştirebilirsiniz.
aehlke

46
@Casey: FWIW, Vim'in sekmelerini ilk kez bildiğimde ve başımı onlar ve ne için oldukları hakkında sarmak zorunda kaldığımda, tam olarak Zathrus tarafından verilen tanımı düşündü. (Ben bir Vim Acemi kullanıcısıyım). Yani hayır, bu kadar kırık ya da sezgisel olmayan bir özellik olduğunu kabul etmiyorum ... "herkes hakkında" aynı fikirde olmadığına daha az katılıyorum (ve en az bir ya da iki referansın iddiayı daha fazla ağırlıklandırabileceğini düşünüyorum). Birden fazla, eşzamanlı ekran düzenine sahip olmak için inanılmaz derecede iyi çalışır.
ata

17
Bu yorum yanlış, neden kaldırıldığından veya kabul edildiğinden emin değilim. Aşağıdaki Robince doğru cevaba sahiptir -: tab sball ve: switchbuf aradığınız şeydir.
Roel

38
+1 "Durdur, durdur, durdur". Vim bir araç olduğu kadar zihniyettir. Yeni kullanıcılara zihniyeti öğretmek önemlidir, böylece aracı tam potansiyeline kullanabilirler.
Cody Poll

273

Burada partiye biraz geç ama şaşırdım bu listede aşağıdakileri görmedim:

:tab sball - bu, her açık arabellek için yeni bir sekme açar.

:help switchbuf- Bu arabellek değiştirme davranışını denetler, deneyin :set switchbuf=usetab,newtab. Bu, arabellek açıksa mevcut sekmeye geçmek veya değilse yeni bir sekme oluşturmak anlamına gelmelidir.


4
İçin 1 switchbuf- set switchbuf=useopencan sıkıcı davranıştan kaçınmak için mükemmeldir :make, :vimgreptampon zaten görüntülenen bile pencere düzeninde tamponlarını değiştirir ve benzeri komutları.
mMontu

3
neden bana uygun değil? kümesinden sonra :se switchbuf=usetab,newtabbir kullanım zaman, bntampon geçmek için, hala yerine varolan sekmeye geçiş Geçerli sekmede tampon dosyasını açmak? Yanlış bir şey mi var?
zhiyelee

173

Vim :help windowkarışıklığı "sekmeler vs tamponlar" oldukça iyi açıklar.

Arabellek, bir dosyanın bellek içi metnidir.
Pencere, arabellekteki görünüm alanıdır.
Sekme sayfası bir pencere koleksiyonudur.

Tamponlarla vim içinde birden fazla dosya açmak sağlanır . Diğer editörlerde (örn. Notepad ++) bu sekmelerle yapılır, bu nedenle vim'deki ad sekmesi yanıltıcı olabilir.

pencereler , çalışma alanını bölmek ve birden fazla dosyayı (arabellekleri) tek bir ekranda birlikte görüntülemek içindir. Diğer editörlerde bu, birden fazla GUI penceresi açılarak ve masaüstünde yeniden düzenlenerek gerçekleştirilebilir.

Son olarak bu benzetmede vim'in sekme sayfaları , pencerelerin farklı yeniden düzenlemeleri olan birden fazla masaüstüne karşılık gelir.

Vim'in help: tab-pageaçıkladığı gibi , bir dosyayı geçici olarak düzenlemek istediğinde, ancak geçerli pencere ve arabellek düzenindeki hiçbir şeyi değiştirmek istemediğinde bir sekme sayfası kullanılabilir. Böyle bir durumda başka bir sekme sayfası sadece belirli bir dosyayı düzenlemek amacıyla kullanılabilir.

Tabii ki aynı dosyayı birçok sekme sayfasında veya pencerede görüntülemenin aynı çalışma kopyasının (arabellek) görüntülenmesine neden olacağını hatırlamanız gerekir.


11
Bu aslında harika bir cevap, ama mantıklı olmak için birkaç okuma aldı. buffers = sekmeler, windows = gui pencereleri, sekme sayfaları = masaüstü bilgisayarlar şu ana kadar kavramlara aşina olmayan biri için bulduğum en iyi mantıklı
icc97

4
Onları bir pencereden bir odaya bakma eğilimindeyim - buffer= nesne , window= bölme ve tab= pencere . Odanın etrafında hareket edebilir ve farklı pencerelerden ( tabs) bakabilirim . Farklı pencereler farklı sayı, düzenleme ve bölmelere sahip olabilir . Aynı nesne , farklı pencerelerdeki farklı bölmelerden aynı anda görüntülenebilir .
go2null

Linux Çalışma Alanları ve Windows paradigmasına aşina iseniz, vimkullanım mirasını göreceksiniz . Başlangıçta sadece bir pencere vardı . Pencere yöneticileri daha sonra pencereleri bölmelere (döşeme WM) veya üst üste binen bölmelere (, yüzen WM) bölmenize izin verdiler, ancak yine de her bölmeye pencere olarak başvurdular. Şimdi bölmenin birden çok çalışma alanında gösterilebileceği bir çalışma alanı kavramını ekleyin. Yani, bu paradigmada, buffer= app , window= window ve tab= çalışma alanı .
go2null

56

Buradaki diğer cevapların aksine, sekmeleri istediğiniz gibi kullanabileceğinizi söylüyorum. vim, sizi önceden tanımlanmış parametrelere göre çalışmaya zorlamak yerine çok yönlü ve özelleştirilebilir olacak şekilde tasarlanmıştır. Hepimiz programcıların "ahlakımızı" herkese dayatmayı nasıl sevdiğimizi biliyoruz, bu nedenle bu başarı kesinlikle birincil bir özelliktir.

<C-w>gfarabellek gfkomutunun sekme eşdeğeri . <C-PageUp>ve <C-PageDown>sekmeler arasında geçiş yapar. (Byobu'da bu iki komut hiçbir zaman benim için çalışmaz, ancak Byobu / tmux dışında çalışırlar. Alternatifler gtve gT.) <C-w>TGeçerli pencereyi yeni bir sekme sayfasına taşır.

Bu vim'in yinelenen bir sekme oluşturmak yerine mümkünse mevcut bir sekmeyi kullanmasını tercih ediyorsanız :set switchbuf=usetab.vimrc dosyanıza ekleyin . Derleme hatalarını görüntüleyen QuickFix komutlarını ayrı sekmelerde açmaya zorlamak newtabiçin listeye ( :set switchbuf=usetab,newtab) ekleyebilirsiniz . Bunun splityerine, derleme hatalarını bölünmüş bir pencerede açan tercih ederim .

Fare desteğini etkinleştirdiyseniz :set mouse=a, sekmeleri tıklatarak etkileşim kurabilirsiniz. +Varsayılan olarak yeni bir sekme oluşturacak bir düğme de vardır .

Sekmelerle ilgili belgeler için :help tab-pagenormal modda yazın. (Bunu yaptıktan sonra, bir pencereyi kullanarak sekmeye taşımayı deneyebilirsiniz <C-w>T.) Uzun bir komut listesi var. Bazı pencere komutları sekmelerle ilgilidir, bu nedenle bu belgelere de bakmak isteyebilirsiniz :help windows.

İlave: 2013-12-19

Her dosya ayrı bir sekmede vim içinde birden fazla dosya açmak için, öğesini kullanın vim -p file1 file2 .... Benim gibiyseniz ve her zaman eklemeyi unutursanız -p, vim normal komut satırı seçeneği ayrıştırma kurallarına uyduğu için sonuna ekleyebilirsiniz. Alternatif olarak, bir bash takma eşlemesi ekleyebilir vimiçin vim -p.


3
vim -pAncak +1, varsayılan olarak yalnızca 10 sekmenin görüntüleneceğini unutmayın. Ek dosyalar tamponlara yüklenir, ancak kendi sekmelerinde görüntülenmez.
IanB

@IanB: 10 sekmeyle sınırlamanın varsayılan ayarını nasıl aşabilirim?
0xC0000022L

3
@ 0xC0000022L tabpagemaxayarı görüyoruz
IanB

14

Ben de aynı problemle karşılaştım. Sekmelerin tampon gibi çalışmasını istedim ve bunları elde etmeyi asla başaramadım. Sonunda karar verdiğim çözüm, tamponların sekmeler gibi davranmasını sağlamaktı!

Yüklendikten ve yapılandırıldıktan sonra Mini Buffer Explorer adlı eklentiye göz atın, herhangi bir işlevsellik kaybetmeden arabelleklerle sekmelerle aynı şekilde çalışabilirsiniz.


10

Bu, Vim'e aşina olmayan ve diğer metin editörlerinden gelenler için bir cevaptır (benim durumumda Yüce Metin).

Tüm bu cevapları okudum ve hala net değildi. Onları yeterince okursanız, mantıklı olmaya başlar, ancak sorular arasında gidip gelmek saatler sürdü.

İlk şey, diğerlerinin açıkladığı gibi:

Sekme Sayfaları , sekmelere çok benziyor davranıyor ve diğer GUI editörlerinin çoğunda sekmelere benziyorlar, ancak değiller. Sanırım Vim'de inşa edilmiş kötü bir zihinsel model, maalesef bir sekme sayfasında sahip olduğunuz ekstra gücü bulutlandırıyor.

Anladığım ilk açıklama @ crenate'in cevabından geliyordu , birden fazla masaüstüne eşdeğer oldukları. Bu açıdan bakıldığında, sadece birkaç masaüstünüz açık olacak, ancak her birinin içinde çok sayıda GUI penceresi açık olacak.

Diğer editörlerde / tarayıcılarda benzer olduklarını söyleyebilirim:

  1. Sekme gruplamaları
  2. Sublime Text çalışma alanları (yani projede bulunan açık dosyaların listesi)

Bunları böyle gördüğünüzde, dosya kümelerini (arabellekleri) birlikte kolayca gruplandırabileceğinizin gücünü fark edersiniz, örn. CSS dosyalarınız, HTML dosyalarınız ve JS dosyalarınız farklı sekme sayfalarında. Bu aslında oldukça harika.

Kafa karıştırıcı bulduğum diğer açıklamalar

Görünüm

Bu benim için bir anlam ifade etmiyor. Tanımlanmış bir sözlük terimi olmasına rağmen , sadece :help windowdokümanda Vim pencerelerine atıfta bulunduğumu duydum . Viewport, Sublime Text, Visual Studio, Atom, Notepad ++ gibi editörlerle ilgili olarak duyduğum bir terim değil. Aslında sekme sayfaları kullanmayı denemeden önce Vim için bunu hiç duymamıştım.

Sekme sayfalarını birden çok masaüstü gibi görüntülerseniz, masaüstüne tek bir pencere olarak başvurmak tuhaf görünür.

Çalışma Alanları

Bu muhtemelen daha mantıklı, sözlük tanımı :

Geçici kullanım için bir bellek depolama tesisi.

Yani bir grup tampon sakladığınız bir yer gibi.

Başlangıçta Sublime Text'in projenizde açtığınız tüm dosyaların bir listesi olan bir çalışma alanı konsepti gibi gelmedim :

açık dosyalar ve her birinde yapılan değişiklikler gibi kullanıcıya özel veriler içeren yüce çalışma alanı dosyası.

Bununla birlikte, daha fazla düşünmek, aslında bunu kabul ediyor. Bir Yüce Metin projesi gibi bir Vim kartotekini görürseniz, her projede sadece bir dosya açmak ve projeler arasında geçiş yapmaya devam etmek tuhaf görünecektir. Bu nedenle, yalnızca bir dosyayı açmak için bir sekme sayfası kullanmak neden gariptir.

Windows koleksiyonu

Burada :help windowsekme sayfalarına atıfta bulunulur. Artı çok sayıda başka cevap da aynı kavramı kullanır. Ancak kafanızı bir vim penceresinin etrafına getirene kadar, bu kum üzerinde bir kale inşa etmek gibi pek kullanışlı değildir.

Yukarıda bahsettiğim gibi, bir vim penceresi bu linux.com makalesinde mükemmel bir şekilde açıklanan bir görünüm penceresi ve sessiz ile aynıdır :

Vim'deki gerçekten kullanışlı bir özellik, görüntülenebilir alanı bir veya daha fazla dosya arasında bölme veya sadece aynı dosyanın iki bitini daha kolay görüntülemek için pencereyi bölme yeteneğidir. Vim belgeleri buna dönüşümlü olarak bir görünüm penceresi veya pencere olarak atıfta bulunur.

Vim yardım özelliğini daha önce: help konusunu kullanarak veya F1 tuşuna basarak kullandıysanız, bu özelliğe zaten aşina olabilirsiniz. Yardıma girdiğinizde, Vim görünüm penceresini böler ve belgenizi alt görünüm penceresinde açık bırakarak üst görünüm penceresinde yardım belgelerini açar.

Bir sekme sayfasının arabellek koleksiyonu yerine bir pencere koleksiyonu olarak adlandırılması garip buluyorum. Ama sanırım her biri aynı tamponu gösteren birden fazla pencereyle iki ayrı sekme sayfası açabilirsiniz, en azından şimdiye kadar anladığım bu.


1
Sonunda, tam zamanlı Vim kullanımının sağlam bir yılından sonra, birden fazla sekme sayfası kullanmak istediğim bir durumla karşılaştım. Şu anda arabellekler benim için mükemmel çalışıyor, çünkü diğer editörlerde sekmeler kullanacağım. Ancak geniş bir monitöre sahipken, 3-4 farklı tampondan oluşan bir demet karşılaştırıyordum. Sonra bir meslektaşım kod tabanının başka bir yerinde bazı kodlar aramamı istedi. Karşılaştırma pencereleri setimi kaybetmek yerine, yeni bir sekme sayfası oluşturabilirim, bu da sadece Vim'i normal kullandığımda olduğu gibi ayrı bir arama yapmama izin verir ve sonra sekme sayfasını bir kez kapatıp ilk setime geri dönebilirim
icc97

4

Bakmak: vim sizin gibi çalışmak istiyor gibi görünmüyor yardım sekmeleri ...

Tamponlar sekmeler arasında paylaşıldığından, belirli bir tamponun yalnızca belirli bir sekmede görünmesi için kilitlenmesi mümkün görünmemektedir.

Yine de iyi bir fikir.

Muhtemelen istediğiniz etkiyi, çoklu gnome terminali gibi sekmeleri destekleyen bir terminal kullanarak, ardından her terminal sekmesinde vim örnekleri çalıştırarak elde edebilirsiniz. Mükemmel değil, ama ...


Bunu denedim, bununla ilgili sorun, sekmeler arasında gezinmeyi zorlaştırmanın yanı sıra, çekili metnin terminal sekmeleri arasında paylaşılamamasıdır, çünkü bunlar aslında iki farklı terminal / kabuktur
puk

@puk: YankRing vim eklentisini deneyin. Çekilmiş metni bir dosyaya kaydeder, böylece vim örnekleri arasında paylaşılabilir.
pixelastic

@Pixelastic Burada sistem panosuna sormak için uygun bir çözüm buldum. Ayrıca, Vim bir örnekte en iyi sonucu verir. İstediğim şeyi yapmayı bıraktım ve
vim'i

@puk: Teşekkürler, sistem panosunu kullanmanın vim örneklerinde de paylaşması anlamına
gelmedi

4
  • .Vimrc dosyamda gf ile yaptığım gibi, sekmeleri işlemek için normal olarak arabellekleri yöneten komutları eşleyebilirsiniz:

    map gf :tabe <cfile><CR>
    

    Eminim aynı şeyi [^

  • Vim'in sekmeler için bunu desteklediğini sanmıyorum (henüz). Sırasıyla sonraki ve önceki sekmelere gitmek için gt ve gT kullanıyorum. Ngt'yi de kullanabilirsiniz, burada N sekme numarasıdır. Sahip olduğum bir şey, varsayılan olarak sekme numarasının sekme satırında görüntülenmemesidir. Bunu düzeltmek için .vimrc dosyamın sonuna birkaç işlev koydum (uzun ve doğru biçimlendirmediği için buraya yapıştırmadım).


<c-w>gfimleç altındaki dosya
adını

4

BufExplorer eklentisi ve birkaç makro kullanarak sekmeler gibi arabellekleri kullanıyorum :

" CTRL+b opens the buffer list
map <C-b> <esc>:BufExplorer<cr>

" gz in command mode closes the current buffer
map gz :bdelete<cr>

" g[bB] in command mode switch to the next/prev. buffer
map gb :bnext<cr>
map gB :bprev<cr>

BufExplorer ile üstte bir sekme çubuğu yoktur, ancak diğer yandan ekranınızda yer tasarrufu sağlar, ayrıca sonsuz sayıda dosya / arabellek açabilirsiniz ve arabellek listesi aranabilir ...


2

Arabelleklerin sekmeler gibi çalışmasını istiyorsanız, tabline eklentisine bakın .

Bu tek bir pencere kullanır ve sekmeleri simüle etmek için en üste bir satır ekler (sadece arabellek listesini gösterir). Bu, sekmelerin yalnızca GVim'de desteklendiği, ancak komut satırı vim'de desteklenmediği uzun zaman önce ortaya çıktı. Sadece tamponlarla çalıştığından, her şey vim'in geri kalanıyla iyi entegre olur.

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.