it-swarm-tr.com

Vim'in sekmelerini tamponlar gibi kullanma

Vim'deki (:tabe, :tabnew, vb.] Sekmeleri kullanma yeteneğine baktım, aynı pencerede gizli arabelleklerde birçok dosyayı açmamın yerine geçiyor.

Açtığım her ayrı dosyanın her zaman kendi sekmesinde olmasını istiyorum. Ancak, bunun önüne geçen bazı şeyler var. Bunları nasıl düzeltirim:

  1. gf ve ^] gibi komutlar başka bir dosyadaki bir konuma atlarsa, dosya geçerli sekmede yeni bir arabellekte açılır. Bu tür komutların tümünü dosyayı yeni bir sekmede açmanın veya önceden açılmışsa mevcut sekmeye dosya açmanın bir yolu var mı?

  2. Tamponları değiştirirken :b <part of filename><tab> kullanabilirim ve mevcut tamponlarda bulunan dosyaların isimlerini tamamlayacaktır. <part of filename>, başlangıç ​​yerine bir dosya adının ortası bile olabilir. Sekmeler arasında geçiş yapmak için bir eşdeğer var mı?

352
indentation

Dur dur dur.

Bu, Vim'in sekmelerinin kullanılmak üzere tasarlanma şekli değildir. Aslında, yanlış adlandılar. Daha iyi bir isim "viewport" veya "layout" olacaktır, çünkü bir sekme budur - mevcut tamponlarınızdaki hepsinin pencerelerinin farklı bir düzenidir. .

Vim'i 1 sekmeye == 1 tampon olarak geçmeye çalışmak boşuna bir egzersizdir. Vim bilmez veya umursamaz ve tüm komutlarda buna saygı duymaz - özellikle, hızlı düzeltme arabelleğini kullanan herhangi bir şey (:make, :grep ve :helpgrep akla) mutlu bir şekilde sekmeleri görmezden gelir ve bunu durdurmak için yapabileceğiniz hiçbir şey yoktur.

Yerine:

  • :set hidden
    Eğer zaten bu sete sahip değilseniz, bunu yapın. Vim'in gezegendeki diğer tüm çoklu dosya editörleri gibi çalışmasını sağlar. Bir pencerede görünmeyen arabellekleri bir yerde düzenlediniz.
  • Tamponlar arasında geçiş yapmak için :bn, :bp, :b #, :b name ve ctrl-6 kullanın. ctrl-6 kendimi seviyorum (yalnız önceden kullanılan tampon belleğe geçer, ya da #ctrl-6 tampon numarası # olur).
  • Arabellekleri listelemek için :ls kullanın veya MiniBufExpl veya BufExplorer gibi bir eklentiyi kullanın.
606
Zathrus

Partiye biraz geç kaldım ancak bu listede aşağıdakileri görmedim şaşırttı:

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

:help switchbuf - bu tampon anahtarlama davranışını kontrol eder, :set switchbuf=usetab,newtab öğesini deneyin. Bu, arabellek açıksa varolan sekmeye geçmek veya değilse yeni bir tane oluşturmak anlamına gelmelidir.

268
robince

Vim :help window "sekmelere karşı tamponlar" karmaşasını oldukça iyi açıklıyor.

Bir arabellek, bir dosyanın bellekteki metnidir.
Pencere, arabellekteki bir görüntü penceresidir.
Sekme sayfası bir pencere koleksiyonudur.

Birden fazla dosya açmak vim'de buffers ile gerçekleştirilir. Diğer editörlerde (örneğin notepad ++) bu sekmeler ile yapılır, bu yüzden vim'deki isim sekmesi yanıltıcı olabilir.

Windows, çalışma alanını bölmek ve bir ekranda birden fazla dosyayı (tampon) birlikte görüntülemek içindir. Diğer editörlerde, birden fazla GUI penceresi açılarak ve masaüstünde yeniden düzenlenerek başarılabilir.

Sonunda bu benzetmede vimin sekme sayfaları, birden fazla masaüstüne, yani pencerelerin farklı düzenlemelerine karşılık gelir.

Vim help: tab-page 'in açıkladığı gibi, kişi bir dosyayı geçici olarak düzenlemek istediğinde, ancak mevcut pencere ve tamponların mevcut düzeninde hiçbir şeyi değiştirmek istemediğinde, bir sekme sayfasının kullanılabileceğini açıklar. Böyle bir durumda, sadece belirli bir dosyayı düzenlemek amacıyla başka bir sekme sayfası kullanılabilir.

Elbette, aynı dosyayı birçok sekme sayfasında veya pencerede göstermenin aynı çalışma kopyasının (tampon) görüntülenmesine yol açacağını hatırlamanız gerekir.

160
crenate

Buradaki diğer cevapların bazılarının aksine, sekmeleri istediğiniz gibi kullanabilirsiniz. vim, sizi önceden tanımlanmış parametrelere göre çalışmaya zorlamak yerine, çok yönlü ve özelleştirilebilir olacak şekilde tasarlanmıştır. Programcıların "Etik" lerimizi herkese empoze etmeyi nasıl sevdiğimizi hepimiz biliyoruz, bu yüzden bu başarı kesinlikle birincil özellik.

<C-w>gf, tamponların 'gf komutunun sekme eşdeğeridir. <C-PageUp> ve <C-PageDown> sekmeler arasında geçiş yapacak. (Byobu'da, bu iki komut benim için hiçbir zaman işe yaramaz, ancak Byobu/tmux dışında çalışırlar. Alternatifler gt ve gT.) <C-w>T geçerli pencereyi yeni bir sekmeye taşır sayfa.

Vim'in mümkünse yinelenen bir sekme oluşturmak yerine mevcut bir sekme kullanmasını tercih ederseniz, .vimrc dosyanıza :set switchbuf=usetab ekleyin. Derleme hatalarını görüntüleyen QuickFix komutlarını ayrı sekmelerde açmaya zorlamak için listeye newtab ekleyebilirsiniz (:set switchbuf=usetab,newtab). Derleme hatalarını bölünmüş bir pencerede açan bunun yerine split'i tercih ederim.

Fare desteğini :set mouse=a ile etkinleştirdiyseniz, üzerlerine tıklayarak sekmelerle etkileşime girebilirsiniz. Ayrıca, yeni bir sekme oluşturacak varsayılan olarak + düğmesi de vardır.

Sekmelerdeki belgeler için normal modda :help tab-page yazın. (Bunu yaptıktan sonra, <C-w>T kullanarak bir pencereyi sekmeye taşımaya çalışabilirsiniz.) Uzun bir komut listesi vardır. Pencere komutlarından bazıları sekmelerle ilgilidir, bu nedenle bu belgelere :help windows üzerinden de bakmak isteyebilirsiniz.

Ek: 2013-12-19

Her dosya ayrı bir sekmede vim'deki birden fazla dosyayı açmak için vim -p file1 file2 ... kullanın. Benim gibiyseniz ve her zaman -p eklemeyi unutursanız, vim normal komut satırı seçeneğini ayrıştırma kurallarını izleyerek sonuna kadar ekleyebilirsiniz. Alternatif olarak, vim ile vim -p arasındaki bir bash diğer adı eşlemesi ekleyebilirsiniz.

50
Zenexer

Ben de aynı problemle karşılaştım. Sekmelerin arabellek gibi çalışmasını istedim ve onları elde etmeyi asla başaramadım. Sonunda çözdüğüm çözüm tamponların sekmeler gibi davranmasını sağlamaktı!

Mini Buffer Explorer adlı eklentiyi inceleyin, kurulduktan ve yapılandırıldıktan sonra, herhangi bir işlevselliği kaybetmeden sekmelerle aynı şekilde tamponlarla çalışabilirsiniz.

15

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

Tüm bu cevapları okudum ve hala belli değildi. Onları okursanız yeterince şeyler mantıklı başlar, ama sorular arasında ileri ve geri gitme saatler sürdü.

İlk şey, diğerleri açıklandığı gibi:

Sekme Sayfaları , sekmelere benziyor, sekmeler gibi davranıyorlar ve diğer çoğu GUI düzenleyicisindeki sekmelere çok benziyorsunuz, ancak değiller. Bence Vim'de yerleşik olan kötü bir zihinsel model, maalesef sekme sayfanızdaki ekstra gücü bulanıklaştırıyor.

Anladığım ilk açıklama @ crenate'nin cevabı 'dı ve birden fazla masaüstüne denk olduklarını anladım. Bu bakımdan görüldüğünde, sadece birkaç tane masaüstünüz açık olacaktı ancak her birinde bir sürü GUI penceresi açılacaktı.

Diğer editörlere/tarayıcılara benzer olduklarını söyleyebilirim:

  1. Sekme grupları
  2. Sublime Text çalışma alanları (yani bir projede sahip olduğunuz açık dosyaların bir listesi)

Bunları böyle gördüğünüzde, dosya kümelerini (tamponları) birlikte kolayca gruplayabildiğinizi fark edersiniz; CSS dosyalarınızı, HTML dosyalarınızı ve JS dosyalarınızı farklı sekme sayfalarında bulabilirsiniz. Bu aslında oldukça güzel.

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

Görünüm

Bu bana hiç mantıklı gelmiyor. Bir tanımlanmış sözlük terimi olmasına rağmen, yalnızca :help window doc içindeki Vim pencerelerini kastettiğini duydum. Viewport, Sublime Text, Visual Studio, Atom, Notepad ++ gibi editörlerle ilgili duyduğum bir terim değil. Aslında sekme sayfalarını kullanmayı deneyene kadar Vim için hiç duymadım.

Birden fazla masaüstü gibi sekme sayfalarını görüntülerseniz, masaüstüne tek bir pencere olarak atıfta bulunmak garip görünür.

Çalışma Alanları

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

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

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

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

açık dosyalar ve her bir değişiklik gibi, kullanıcıya özel verileri içeren yüce çalışma alanı dosyası.

Ancak daha fazla düşünerek, bu aslında aynı fikirde. Sublime Text projesi gibi bir Vim sekmesi sayfasını göz önünde bulundurursanız, o zaman her projede sadece bir dosyayı açmak ve projeler arasında geçiş yapmak tuhaf görünecektir. Bu nedenle, neden sadece bir dosyayı açmak için bir sekme sayfasını kullanmak gariptir.

Windows topluluğu

:help window, bu şekilde sekme sayfalarına atıfta bulunur. Ayrıca birçok başka cevap aynı kavramı kullanmaktadır. Ancak kafanızı bir vim penceresinin etrafında dolana kadar, o zaman kum üzerinde bir kale inşa etmek gibi pek bir faydası olmaz.

Yukarıda bahsettiğim gibi, bir vim penceresi bir görünüm alanıyla aynıdır ve bu konuda mükemmel şekilde açıklanan sessizdir linux.com makalesi :

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 değiştirilebilir bir görünüm penceresi veya pencere olarak atıfta bulunur.

Vim'in yardım özelliğini aşağıdakileri kullanarak: help konusunu veya F1 tuşuna basarak kullandıysanız, bu özelliği zaten biliyor olabilirsiniz. Yardıma girdiğinizde, Vim görünüm alanını böler ve yardım belgelerini en üst görünüm alanında açar ve belgenizi alt görünüm alanında açık bırakır.

Bir sekme sayfasının arabellek koleksiyonu yerine pencere koleksiyonu olarak adlandırılmasının garip olduğunu biliyorum. Fakat sanırım her biri birden fazla pencerenin aynı arabellekte olduğunu gösteren iki ayrı sekme sayfası açabilirsiniz, en azından şu ana kadar anladığım kadarıyla.

8
icc97

Şuna bakmak: yardım sekmeleri, vim'in sizin gibi çalışmasını istiyor gibi görünmüyor ...

Tamponlar sekmeler arasında paylaşılır, bu nedenle belirli bir sekmede görünmesi için belirli bir arabelleği kilitlemeniz mümkün görünmez.

Yine de iyi bir fikir.

Multi-gnome-terminali gibi sekmeleri destekleyen bir terminal kullanarak daha sonra her terminal sekmesinde vim örnekleri çalıştırarak muhtemelen istediğiniz efekti elde edebilirsiniz. Mükemmel değil, ama ...

4
Mike G.
  • Ben.

    map gf :tabe <cfile><CR>
    

    Eminim [^ ile aynı şeyi yapabilirsiniz.

  • Vim'in bunu sekmeler için desteklediğini sanmıyorum (henüz). Sırasıyla sonraki ve önceki sekmelere geçmek için gt ve gT'yi kullanıyorum. Ayrıca N'nin sekme numarası olduğu Ngt'yi de kullanabilirsiniz. Sahip olduğum bir eş, varsayılan olarak, sekme numarasının sekme satırında görüntülenmemesidir. Bunu düzeltmek için --- .vimrc dosyam 'nin sonuna bir çift fonksiyon koydum.

4
Lucas Oman

BufExplorer eklentisini ve birkaç makroyu kullanarak sekmeler gibi tamponlar 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ğuna sahip değilsiniz, ancak öte yandan ekranınızda yer tasarrufu sağlar, ayrıca sonsuz sayıda dosya/arabellek açabilirsiniz ve arabellek listesi aranabilir ...

4
jkramer

Tamponların sekmeler gibi çalışmasını istiyorsanız, tabline plugin 'e göz atın.

Bu tek bir pencere kullanır ve sekmeleri simüle etmek için en üstüne bir satır ekler (yalnızca tamponların listesini gösterir). Bu, uzun bir süre önce, sekmeler sadece GVim'de desteklendiğinde, vim komut satırında desteklenmediğinde ortaya çıktı. Sadece tamponlarla çalıştığı için her şey vim'in geri kalanıyla iyi bir şekilde bütünleşir.

2
thien.vuong