Mevcut arabelleği vim'deki yeni bir sekmede nasıl düzenlerim?


51

Farz etmeye başladığımı varsayalım:

vim foo bar

Şimdi bu dosyaların her birinin kendi sekmesinde olmasını istediğime karar verdim. Vim çıkmadan ve -pseçeneği komut satırına eklemeden bunu yapmanın bir yolu var mı ?


Birçoğunuz muhtemelen aşağıdaki liuyang1'in cevabındatabe % belirtilenleri arıyoruz .
Mateusz Piotrowski

1
@MateuszPiotrowski Bu yorumda bu cevaba cevap verdiğim gibi , :tabe %geçerli bir dosya yolu olmayan arabelleklerle çalışmaz. :tab sbher zaman çalışır.
JoL,

Yanıtlar:


30

Vim'i böyle başlattığınızda, bir vim istemcisi almazsınız, metin editörü terminal veya cmd komutunu kullanıyor - iki dosya iki farklı tamponda. :lsTamponları listelemek için kullanın :

:ls
  1 %a   "foo"                 line 6
  2      "bar"             line 0

% A, aktif tampondur. Sen kullanabilirsiniz :b2tampon 2 veya kullanmak için anahtara :bnyanında veya döngüsüne :bpönceki için. Pencereleri yatay olarak bölen (CTRL-Ws) yerine dikey olarak bölmeyi tercih ederim (CTRL-W v).

2 tane dosya yüklüyse ve sekme yoksa (henüz), ekleyebilir :tabnewve yeni sekme türünde:b2

Her zaman kendi sekmelerinde arabellek yüklü olmasını istiyorsanız, bu makaleye göz atın .


Evet ama sekmelerim olsun istiyorum.
innaM

Yani zaten vim'i bir cmd / terminal kabuğunda değil, vim istemcisinde dosyalarınızı alacak şekilde başlattınız.
DaveParillo

1
Neyi kastettiğinden emin değilim. Kabuğu yukarıda açıklandığı gibi vim başlatmak için kullanıyorum ve sonra çalışan bir vim var.
sabah

Ah! Sanırım tamponların sekmelerde yerel olmadığını asla anlamadım. Her zaman (çok fazla düşünmeden) her sekmenin kendi tampon listesine sahip olduğunu düşündüm.
sabah

Benim makinede, vimkabuk içinde bir editör başlatacak. Vim grafiksel kullanıcı arayüzünü elde etmek için kullanmam gerekiyor gvim. Ve siz haklısınız - tamponlar vim uygulamasında globaldir.
DaveParillo

47

Tamponu yeni bir sekmede açmak ister misiniz?

Ekranı ayır (Ctrl-W s), bir pencere aç ve Ctrl-W T


Hmm. Aklımdaki şey tam olarak değildi, ama bir başlangıç ​​için fena değil. Ctrl-w THenüz bilmiyordum . Tabii ki, ilk sekmede hala bu şekilde iki tampon bulunacaktır.
sabah

Hayır. Ekranı iki pencereye ayırıp bunlardan birini yeni bir sekmede açtıktan sonra, ilk sekmeden uzaklaşır. Kalmayacak (en azından benim gvim72'de yok). Tamponlar gittiği sürece, pencerelere / sekmelere bağlı değillerdir ... daha çok vim'in dosya içeriğini sakladığı hafızaya benzerler.
Rook

Ah! Haklısın. Çıktısını yanlış yorumluyordum :ls.
sabah

Ayrıca, ctrl-w V pencereyi dikey olarak böler.
Shannon Nelson

1
CTRL-w v, pencereleri dikey olarak bölmek için doğru komuttur
JRM

27

Bunu, tabkomutu komutla birleştirerek yapabilirsiniz sb[uffer].

Öncelikle yeni bir sekmede açmak istediğiniz tamponun tampon kimliğini bilmeniz gerekir. Bunu şu lskomutla bulabilirsiniz :

:ls
  1 %a   "foo"                          line 1
  2      "bar"                          line 0

Kimliği aldığınızda, aşağıdakileri kullanarak kolayca yeni bir sekmede açabilirsiniz:

:tab sb 2

sbKomut normalde yeni bölünmüş pencerede verilen tampon açar, ancak tabkomut yerine, yeni bir sekmede açmak için neden olur.

tabKomut ayrıca sekme listesindeki yeni sekme oluşturulmalıdır nereye belirlemenizi sağlar. Örneğin :0tab sb 2, geçerli sekmeden sonra listenin başında yeni 'çubuk' sekmesinin görünmesine yol açar.


2
Arabellek numarasına ihtiyacınız yoktur, arabellek adının belirgin bir bölümünü verin ve VIM gerisini sizin için halleder.
tatlı

1
Aradığım ve ihtiyaç duyduğum cevap buydu. :tab buffer part-of-nameYeni bir sekme açmadığında dehşete kapıldım ! Ama :tab sb part-of-namebir cazibe gibi çalıştı. Teşekkür ederim!!!!
Sukima,

Bu OP'nin kesin sorusu değil, tam olarak aradığım
şeydi

25

OP'nin istediği şeyi başarmanın daha iyi bir yolu şudur:

:bufdo tab split

Bu, her bir arabelleği, kaç tane olursa olsun, kendi başına bir sekmeye açacaktır. Bu kadarını kullanırsanız, .vimrc'nizde bir harita oluşturmak kolaydır. Bu küçük vim eklentisi gibi bir şeyle birlikte , aşağıdakiler :grep(veya : Ack ) her öğeyi kendi sekmesinde açacaktır :

:grep foo
:QuickFixOpenAll
:bufdo tab split

Elbette, bir eklentiye başvururken, onu hızlı düzeltme listesi içeriğini doğrudan sekmelere açacak şekilde değiştirmek yeterince kolay olacaktır.

GÜNCELLEME : ggustafsson’nın yorumuna gerçekten bir not bırakmam gerekiyor. Çok ve uzakta olan, partinin en iyi cevabıdır ve Vim'in kompozisyonel davranışa olan eğilimini güzelce gösterir. Öneri:

 :tab sball

Vim'in yardımına bakmaya değer : tab ve : burada neler olup bittiğini görmek için sball .


Önceki bir düzenlemeden benzer bir yaklaşım, posterity için :bufdo execute "tabnew %". Bence yeni yaklaşım biraz daha net.
John Whitley

Bir uyarı: eğer vim'deki başlangıç ​​tamponu boş değilse, bu son tamponu iki kez açmış gibi görünüyor. Basit bir düzeltme bulursam güncelleme gönderirim.
John Whitley

12
:tab sballdaha iyi çalışıyor gibi görünüyor.
ggustafsson

6

1. İki dosyayı Vim'de açın.

$ vim foo bar

2. Tampon sayısını kontrol edin.

: ls
  % 1 a "foo"
  2 "bar"

3. İki komutu zincirleyin: tabnewyeni bir sekme açmak b <buffer_number>ve istediğiniz arabellek sekmeye yüklemek için.

: tabnew | b 2

8
3. adımdaki sorun, önce boş bir arabellekle yeni bir sekme oluşturması ve ardından arabellek 2'yi açmasıdır; bu da arabellek listesinde fazladan adsız bir arabellekle sonuçlanır. Kullanımı daha iyi:tab sb 2
rkjnsn

1
@rkjnsn bunu bir cevap olarak göndermelisiniz - 'vim'deki yeni bir sekmede varolan bir arabelleği nasıl düzenlerim?' sorusuna cevap verir.
JonnyRaa

1
@JonnyLeeds yapıldı.
rkjnsn

4

Sadece diğer erkeklerin bahsetmediği bir nokta ekle.

  • geçerli pencereden yeni sekmeye

Birden fazla pencereye sahipseniz, <C-W>Tbu pencereyi yeni sekmeye taşır. Ancak, bu kısayol yalnızca "Pencere" için "arabellek" değil. Bu stili tercih ediyorsanız :spveya <C-W>smevcut arabelleği bir pencereye kopyalamak <C-W>Tistiyorsanız , ardından yeni sekmeye taşıyın.

4 tuş vuruşu veya 7 tuş vuruşu.

  • yeni sekmeye geçerli tampon

:tabe % Geçerli tampon için yeni sekme açmak için

7 tuş vuruşu.

  • yeni sekmeye arabellek

CtrlP eklentisini kullanırsanız, "CtrlPBuffer" ı, sonra <C-t>da yeni sekme sayfasını açmak için kısayolu kullanabilirsiniz. Bu tarz, farklı tamponlara kolayca geçiş yapmak için.

"CtrlPBuffer" kısayoluyla, 4 veya daha fazla tuş vuruşuyla.


:tabe %Uzun zamandır aradığım şey bu, teşekkürler!
pevik

Hayır, :tabe %mevcut tampon için gerçekten yeni bir sekme açmıyor. Olan şu ki %, mevcut tamponun dosya :tabeyoluna genişledi ve o yolu açtı. Vim, zaten açık olan bir dosyayı açmaya çalıştığınızı görecek ve sahip olduğunuz arabelleği yeniden kullanacaktır. Bu, bunun hiçbir dosya yolu olmayan arabelleklerle çalışmadığı anlamına gelir. Yeni bir dosya açarsanız :newve kaydetmediyseniz, bununla yeni bir sekmeye koyamazsınız. İhtiyacınız olan gerçek komut rkjnsn'in cevaplarına yazdığı şey: :tab sb %veya daha kısa::tab sb
JoL
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.