Mevcut pencereyi mevcut sekmeye taşıma


14

Bazen pencereleri zaten var olan bir sekmeye taşımam gerekiyor ve bunu yapabilen bir komut / klavye kısayolu olup olmadığını merak ediyordum. Pencereyi kapatabileceğimi, sekmeye geçebileceğimi ve sonra yeni bir bölmede açabileceğimi biliyorum, ama bunu başarmanın daha kısa bir yolu olup olmadığını merak ediyordum. Bunu , yeni bir sekme yerine var olan bir sekmeye taşımak istediğimi unutmayın <C-w>T.


Pencereleri sekmeler arasında taşımak mümkün değildir.
lcd047

Hmm, bu çok kötü. Muhtemelen bunu başarabilecek bazı haritalama veya komut oluşturabilirim.
EvergreenTree

Bence yapabileceğiniz en iyi şey tüm pencere ayarlarını kaydetmek ve daha sonra mevcut sekmede yeniden oluşturmaktır.
tommcdo

Yanıtlar:


10

Geçerli sekme sayfasında varolan pencereleri hareket ettirmek için komutlar olmasına rağmen (örn. Döndürerek, yeniden boyutlandırarak ve taşıyarak pencere düzenini etkiler), bir pencereyi başka bir sekmeye taşımak için komut yoktur.

Bir pencere yüklü bir arabellek için sadece bir görüntü alanı olduğundan, şunları yapmanız gerekir:

  1. Geçerli pencerede görüntülenen arabellek numarasını not edin.
  2. :close! pencere.
  3. Mevcut hedef sekme sayfasına geçin.
  4. :sbuffer yeniden açmak için arabellek numarası.

Bununla pencereye özgü seçenekleri kaybedersiniz. Bunları bir komut dosyasına da kaydedebilir ve geri yükleyebilirsiniz.


Ben böyle olduğunu düşündüm. Muhtemelen tam olarak bunu yapan küçük bir senaryo yapabilirim.
EvergreenTree

2
  1. mevcut hedef sekmesine git
  2. istediğin gibi böl
  3. :b ab(gerisini sekme ile tamamla)

absadece rastgele harfler, yerine istediğiniz dosya adının başlangıcı ile değiştirin. :bsekme tamamlama benim için çok iyi bir performans sergiledi, genellikle sadece bir harf ve 1-2 Tabtuşa basarak doğru kaynak arabelleğini bulabilir .

Bu yaklaşımın Ingo'nun üzerindeki faydası, daha az bilişsel yük anlamına gelen hiçbir şeyi not etme veya hatırlama eksikliğidir. Zaten bildiğiniz dosya adı.


2

Aşağıda tanımlanan iki komut, tüm arabellekleri sağ taraftaki sekmeden geçerli sekmeye taşır ve ardından sağ taraftaki sekmeyi kapatır. Mtabspyatay olarak Mtabvspbölerek dikey olarak böler. Komutları kullanmadan önce birleştirilmiş sekmeyi taşımanız gerekir. Kullanın +tabm, -tabmya da <n>tabm.

Kurmak

Aşağıdaki vim betiğini kendinize ekleyin vimrc:

function! Mtab(vert)
    if tabpagenr() == tabpagenr("$")
        return 0
    endif
    +tabnext
    let s:killed_tab = tabpagenr()
    let s:buf_list = tabpagebuflist()
    -tabnext
    for item in s:buf_list
        if a:vert
            vsp
        else
            sp
        endif
        execute "buf " . item
    endfor
    execute "tabclose " . s:killed_tab
endfunction

command! Mtabsp call Mtab(0)
command! Mtabvsp call Mtab(1)

Teknik detaylar

Mtab işlevi bir parametre alır vert. Geçerli sekmenin yatay mı yoksa dikey mi bölüneceğini belirler.

İstenilen sonuç aşağıdaki adımlarla elde edilir:

  1. Geçici olarak bir sonraki sekmeye geçiyoruz
  2. Sekme numarasını ve arabelleğe başvurmak için iki değişken kullanın
  3. Geçerli sekmeye dön
  4. Sekmeyi ayırıyoruz ve her arabelleği açıyoruz
  5. Son olarak, sağ taraftaki sekmeyi kapatıyoruz

Geçerli sekmemiz sonsa, komutlar yok sayılır.


1

Bir dosya arabelleği ise ( çizik tamponları için çalışmaz vb.), Şunları yapabilirsiniz:

  1. :let @f=@%ENTER - kaynak penceresinde;
    • Bu, normal kayıt f'nin içeriğini geçerli dosya adını içeren % özel kayıt içeriğiyle değiştirir .
    • Not: register f dosyasını dosyada olduğu gibi seçtim , ancak istediğiniz başka bir kayıt kullanabilirsiniz.
    • Kaydın aşağıdakilerle doğru yol içerdiğini doğrulayabilirsiniz: :echo @f
  2. İsteğe bağlı olarak: Ctrl-WCtrl-Q- eski pencereyi kapatmak için;
  3. gt/ gT- hedef sekmesine (ve pencereye) git;
  4. Ctrl-Ws - yeni bir pencere açmak için sekmeyi istediğiniz şekilde bölün;
  5. :e␣Ctrl-RfENTER
    • yeni açılan pencerede, f kaydında saklanan yoldan bir dosya yükler ;
    • Not: Buradaki ␣ karakteri normal bir alanı işaretler.

Önemli not: Yolda boşluklar veya bazı özel karakterler varsa son adım düzgün çalışmaz ! :-( Geçici çözüm olarak, aşağıdaki gibi, biraz daha uzun komut boşluklu yollar için çalışmalıdır (yine de diğer bazı özel karakterler için başarısız olabilir):

  • :e␣"Ctrl-Rf"ENTER

(yani, Ctrl-R'nin sonucundan alıntı , f )

Lkraav ve ingo-karkat'ın cevaplarından esinlenmiştir .


Bu harika, Windows'un "kes ve yapıştır" için bir eşleme ayarlamam gerekiyor Tabs.
dragon788
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.