Birden çok sekmeyi aynı anda nasıl açabilirim?


15

Eğer kullanırsam:

:tabedit file1 file2

Alırım:

E172: Only one file name allowed

:tabeditBirden fazla dosya adıyla kullanmanın herhangi bir yolu var mı ? Veya aynı anda birden fazla sekme açmanın başka bir yolu mu?



@kenorb Evet. Ve burada tam olarak aynı cevabı var, ne yaptığı hakkında hiçbir açıklama olmadan. Peki ona bağlantı nasıl bir değer katar?
Martin Tournoij

Başka cevaplar da var ve yeni cevaplar gelebilir. İkincisi, orada benzer / bağlantılı başka birkaç tane var, böylece kullanıcılar ilgili ilişkilerden de daha fazla bilgi edinebilir.
kenorb

Ben bu tek astar öğrendik: :args *.c | tab all. Diğer soru bundan daha popüler, bu yüzden de bağlamak iyi.
kenorb

Yanıtlar:


11

Bağımsız değişken listesini değiştirerek "yerleşik" yolu kullanarak benim diğer cevap sorunları ve karmaşıklığı göz önüne alındığında, bunu yapmak için kendi küçük işlevi tarafından ekledim:

" Open multiple tabs at once
fun! OpenMultipleTabs(pattern_list)
    for p in a:pattern_list
        for c in glob(l:p, 0, 1)
            execute 'tabedit ' . l:c
        endfor
    endfor
endfun

command! -bar -bang -nargs=+ -complete=file Tabedit call OpenMultipleTabs([<f-args>])

Şimdi kullanabilirsiniz :Tabedit *.vim. Bu işlev tüm globbing desenlerini genişletecek ve :tabedit <f>her dosya için yürütecektir . İstediğiniz kadar yol adı ekleyebilirsiniz, örneğin bunların hepsi işe yarar:

:Tabedit file.rb
:Tabedit *.c
:Tabedit file1.py file2.py _*.py
:Tabedit /etc/hosts file{1,2}.sh

Şey, vb.

Biraz bu koymak globedit.vim da istenen komut eklenti, :Edit, :Splitvb


2
Büyük fonksiyon ve komut! Bazı iyileştirmeler: (1) - [<f-args>]yerine "<args>"bu patternparametre kullanılır, bir List (dizi) olur ve dizeyi manuel olarak bölmek zorunda kalmazsınız. (2) glob()Listeyi döndürmesi için üçüncü argüman olarak sıfırdan farklı bir değer iletin. Sonra orada manuel olarak bölmeyi de önleyebilirsiniz. Sen geçmeniz gerekir 0davranışı etkilemeden bunu atlamak için ikinci argüman olarak: glob(l:p, 0, 1).
tommcdo

8

Bildiğim kadarıyla, bunu yapmanın tek yerleşik yolu:

:args *.vim
:tab all

İlk olarak, :argsargüman listesinin yerini alacaktır. Argüman listesi Vim'i açtığınız dosyaları listeler; yani vim file1 file2argüman listesinin file1ve içerdiği anlamına gelir file2.
Bunu çalışma zamanında değiştirebiliriz ve Vim, argüman listesindeki her yeni giriş için bir tampon açar.
Daha :help argument-listfazla bilgi için bakınız .

:allKomut, argüman listesindeki her giriş için bir pencere açar :tabkomutu bir komut çalıştırır ve komut yeni bir pencere açacak verilen yeni bir sekme açar.

Uyarılar

Bu yöntemin bazı uyarıları vardır.

Her şeyden önce, kopyalar için kontrol yoktur, böylece aynı arabellek için 2 veya daha fazla sekme elde edebilirsiniz.

Ancak en büyük sorun, tüm sekmelerinizi bağımsız değişken listesinde bulunanlarla değiştirmesidir; böylece mevcut tüm sekmeleri kaybettiniz .
Sen hafifçe kullanarak bu asabilirsiniz :argadd *.vimiçin eklemek Değiştirmek yerine, argüman listesine; ama gibi komutları :editya :tabeditdo not argüman listesi değiştirebilir ve argüman listesine ekleyebilirsiniz sürece (hala olsa, tampon liste halinde var) bu sekmeleri kaybedecektir. Ayrıca, argüman listenizdeki her şeyi bir sekmede açmak istemeyebilirsiniz, belki sadece 2 dosyayı ek sekme olarak açmak isteyebilirsiniz.

Belki de ilk önce argüman listesine şu anda açık olan tüm sekmeleri ekleyerek bunu biraz daha iyi hale getirebilirsiniz (ki bu gerçekten işe alamıyorum), ama bu hala mükemmel olmaktan uzak. Bir sekmede 2 veya daha fazla pencere varsa, yine de bunları değiştirir ...


Yanlış olabilirim, ancak bu fazladan bir sekme açmıyor (sekmeleri varsayılan olarak açmayla ilgili sorumda görüldüğü gibi)?
muru

1
Bu soruya verdiğim cevaba atıfta bulunuyorsanız, kullandığım fark :argdo tabedit %, her bir argüman için yeni bir sekme açar. Tek bir sekmeden başlayıp n yeni sekme açmak , doğal olarak sizi n + 1 sekmelerle bırakacaktır . :tab allçok daha iyi bir çözümdür.
tommcdo

@tommcdo Josh Petrie'nin cevabından bahsediyordum . Onun takma adlarından birine olmazdın, değil mi? :)
muru

Haha, hayır. Farklı bir soru düşünüyor olmalıyım!
tommcdo

Uyarılar rağmen, ben argadd * | tab allen iyi gibi ve kimsenin aynı soruyu birkaç SE siteleri bile bahsetmedi şaşırdım.
Büyük McLargeHuge

2

Bunun :nextyerine komutu kullanabilirsiniz , örneğin:

:n file1 file2

veya:

:n *.txt

Bu kullanmakla aynı görünüyor :args *.vimmu? En azından aynı şekilde davranıyor ve aynı :help next_folarak
belgeliyor

Daha kısa ve basit ve bundan bahsetmediniz. Davranış, bu soruda sorduğunuz gibi aynıdır.
kenorb

2

Komut satırından şunları kullanabilirsiniz:

vim file1 ... filen -p

Ve eğer -phala kullanmayı unuttuysan,

:tab ball

Btw, değişkenin tabpagemax(varsayılan değer 10) bu şekilde kaç sekme açabileceğinizi sınırladığını unutmayın .


0

Aslında yeni sekmeler açabilir ve mevcut sekmelerinizi yeni işlevler yazmadan saklayabilirsiniz ( Yığın Taşması'ndaki şu cevaba bakın ):

:args file1 file2 | argdo tabe

:tabeİlk dosya geçerli sekmede açılacağı için, bunu yapmadan önce yeni bir boş sekme ( ) açmak isteyebilirsiniz . Ayrıca, ekstra boş bir sekme açık bırakılacaktır ( :help argdonedenini anlamak için bakın ).


Ayrıca, sözdizimi vurgulamasını (bazı nedenlerden dolayı) bağlantıda açıklandığı gibi düzeltmeniz ve son sekmeyi kapatmanız gerekir, böylece 'tam' komutu şöyle olur: :tabnew | args file1 file2 | argdo tabe | tabdo syntax onSonuncuyu :closekaldırmak için istemi temizlemek ve yazmak için Enter tuşuna basmanız gerekir ( boş) sekmesi ... çok fazla yazmanız ve sadece çok fazla sekme açmanız durumunda buna değer (2 veya 3 dosya için, sadece :tabeiki kez kullanmak daha hızlı olurdu).
Martin Tournoij
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.