Joker karakter ifadesiyle eşleşen birden çok dosya nasıl açılır?


10

Bir glob ifadesiyle eşleşen birkaç dosyayı düzenlemek istiyorum. Örneğin, alt dizinlerindeki tüm git config dosyalarını düzenlemek için, bunu kabukta yapabilirim:

vim */.git/config

Vim :komut satırında :find */.git/configbenzer bir şey yapmayı bekledim (yani glob ifadesiyle eşleşen tüm dosyaları aç), ancak bunun yerine şikayet ediyor E77: Too many file names.

Bir joker karakter / glob ifadesiyle eşleşen (bir işlev yazmayı içermeyen) birden fazla dosyayı açmak için Vim komutu veya bir astar var mı?

Yanıtlar:


9

Kullanabilirsiniz :args {glob}. Glob'unuzda, **dizinleri özyineli olarak geçecektir.

Bu, Vim'i bağımsız değişken olarak bir veya daha fazla dosya adıyla başlattığınızda doldurulan liste olan bağımsız değişken listesini doldurur.

Senin argüman listesi doldurulur sonra, bunun kullanarak gezinebilirsiniz :nextve :previous. Ayrıca :firstve :lastkomutlarıyla ilk ve son öğeye atlayabilirsiniz .


1
Güzel :) :args */.git/configaslında tampon listesini de doldurur, bu yüzden de :bnextçalışır. Bu tuhaf görünüyor mu? (Vim 7.4.52 ve Neovim)
Justin M. Keyes

1
Ayrıca başkalarına bir hatırlatma, ]adevir :argsliste halinde github.com/tpope/vim-unimpaired yüklenir.
Justin

Ayrıca :argadd file*yapabilir.
kenorb

Glob kalıplarını ( **) kullanmak için globstarayarlamanız gerekir , bkz: Tüm iç içe dizinlerin altındaki tüm dosyaları kabuk globbing ile eşleştirme .
kenorb

@ JustinM.Keyes Tampon listesi, argümanlar listesinin bir üst kümesidir, bu yüzden beklenen bir durumdur.
jamessan

3

Eşleşen dosyaları ayrı sekmelerde açmak için…

:n */.git/config | tab all

Explanation: :n ( :next) sonraki dosya listesini tüm eşleşmelere ayarlar. tab allsonraki dosya listesindeki tüm dosyaları yeni sekmelerde açar.

… Ya da…

for f in glob("*.py", 0, 1) | exe "tabe" f | endfor

Açıklama: In glob(…), 0 araç içerecek şekilde tüm aksi takdirde nedeniyle göz ardı açsa bile, eşleştirme dosyaları suffixesveya wildignorecaseayarlarıyla. 1, dize yerine liste döndürmek anlamına gelir. exe "tabe" fkısa bir biçimidir execute "tabedit" fve değişken tarafından belirtilen dosyayı fyeni bir sekmede açmak anlamına gelir .


1
İşlere benziyor :n */.git/config | buffer.
Mateen Ulhaq

2

Vim: komut satırında :find */.git/configbenzer bir şey yapmayı bekledim (yani glob ifadesiyle eşleşen tüm dosyaları aç), ancak bunun yerine şikayet ediyor E77: Too many file names.

Belgeleri okumadan önce hiçbir şey beklemeyin.

Tom'un cevabına ek olarak, doğrudan :nextalternatif olarak kullanabilirsiniz :args.


0

Dosyaları açmak vim */.git/configkesinlikle işe yaramalıdır. Değilse, Vim'inizi 7.4'e yükseltmelisiniz (önceki sürüm daha buggy idi).

Alternatif olarak aşağıdakilerden birini deneyin (editör içinde):

:n `find .git/ -name config`
:args `find . -name config`

Sorumu dikkatlice okumadınız. Ve kabul edilen cevaptan da bahsediliyor :args.
Justin M. Keyes

@ JustinM.Keyes Puanlarınız için teşekkür ederiz. Joker karakter varsayılan olarak çalışmalıdır ve bu 7.4'te çalışması gerektiğini söyleyen tek cevaptır (yükseltmeden önce tam olarak aynı hataya sahip olduğum için). Kullanılması argstek geçici çözüm olmakla birlikte, ayrıca daha bunu kullanarak, daha karmaşık çözümler için kullanmak isterse diye vim içinde başka kullanıcıların bu-kendini kabuk genişleme nasıl kullanılacağını gösterir findgibi, bu bir . Bu yüzden sorunuza biraz katma değer verdiğini düşünüyorum. Umarım senin için sorun olmaz.
kenorb

Asla bir sorunum olmadı vim */foove Vim sürümü ile ilgili bir yol yok, çünkü bu bir kabuk özelliği.
Justin M. Keyes

0

Açık ancak yukarıda listelenmeyen - örnek, adlarında create_table dizesine sahip tüm sql dosyalarını bulun

:args **/*create_table*sql

ve kontrol et

:ls

ve ilkini aç

:b 1
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.