Vim'de aynı anda birkaç dosyayı nasıl açabilirim?


87

Bir dizindeki tüm dosyaları Vim içinden açmanın bir yolu var mı? Yani :commandaslında "Aşağıdaki tüm dosyaları aç/some/path tamponlara aç" anlamına gelir.

İdeal olarak, bir dizin altındaki tüm dosyaları özyinelemeli olarak açmak harika olurdu.

Yanıtlar:


105

Aradığınız komut, args'dir:

Örneğin:

:args /path_to_dir/*

dizindeki tüm dosyaları açacak


32
**Dosyaları yinelemeli olarak eşleştirmek için kullanın . Örneğin:args /path_to_dir/**
Daf

1
Dosyaları uzantısız açmak için, üst dizini belirtin, örneğin args ** /. Hg / hgrc çalışır, ancak ** / hgrc çalışmaz.
79E09796

11
Dosyalar açıldıktan sonra, :tab allonları ayrı sekmelere koymak için kullanın .
Backlin

"Tüm dosyalar", istenmeyebilecek alt dizinleri içerecektir. (Vim hatalarım "/path_to_dir/subdir/" Illegal file name). Hızlı çözüm, bunları argd */listeden tekrar kaldırmak için ikinci komutu çalıştırmaktır
lessthanideal

Cevabı aşağıdaki öneriyle tamamlamak gerçekten güzel olurdu: İyi bir uygulama olarak ve aynı komut setinin açılan tüm dosyalara nasıl uygulanacağını göstermek için, tüm siparişleri uygulamak için aşağıdaki komutu çalıştırabilirsiniz. my_commands_batch.vim dosyasında yer alan:argdo source my_commands_batch.vim
aturegano

21

Belirli bir uzantıyla biten tüm dosyaları açmak istersem neden çalışmıyor? denedim

:n ./**.cs

ve yalnızca geçerli dizindeki dosyaları açar.

Cevabı buldum Doğru kod :n **/*.cs

Daha fazla bilgi için :h find


9

Denedin mi

:n /some/path/*

/ Bazı / yolundaki tüm dosyaları açacaktır.

Dosyayı yinelemeli olarak açacağını sanmıyorum.

DÜZENLE

Belki ** kullanmak, daf'ın bahsettiği gibi yinelemeli olarak açılacaktır


: N ne anlama geliyor? Vim'in yardımına baktığımda sadece "son kalıbı tekrarlamamı" işaret ediyor .. anladığım kadarıyla tuş vuruşu. Yalnızca komut modu için yardım almanın bir yolu var mı?
U0001

1
Çok kolay: h: n .. ": n" için yardım alın. Kendi sorularımı cevaplamayı sevmiyor
muyum

4

Karışıklık gerektirmeyen bir yöntem args, dosya listesini bir metin dosyasına koymak ve ardından :sobu dosyadaki komutları çalıştırmak için komutu kullanmaktır .

Örneğin, .phpbelirli bir dizinde sona eren tüm dosyaları açmak istiyorsanız , önce files.txtdosyaları açmak için kullanmak istediğiniz komutun başına eklenen dosyaların listesini içeren bir dosya oluşturun .

sp alpha.php
sp bravo.php
sp charlie.php

Sonra, vim içinde:

:so files.txt

Dosya listesi büyükse, files.txtçıktısını lsbir dosyaya yeniden yönlendirerek ve ardından spher dosya adının başına bir vim makrosu kullanarak dosyayı hızlı bir şekilde oluşturmak nispeten önemsizdir .

Bu açıkça argsve argdokomutlarını kullanmak kadar zarif değil , ancak bu komutlar da çok daha karmaşık.

Bunu komut satırında tek bir komutla yapmanın bir yolu da olabilir, ancak 16 yıl sonra bile vim programlamayı hala garip ve gizemli buluyorum.


İlginç ! Bu dosyaların tümü gerekli değilse, belirli bir dizindeki tüm dosyaları körü körüne açmak yerine, hangi dosyaların açılması gerektiğini kontrol etmenin iyi bir yolu gibi görünüyor.
cram2208

1

Dosyaları yinelemeli olarak açmanın başka bir yolu

find . -type f -exec vi {} \;

4
"Vim içinden" kısıtlamasına uymuyor.
ZyX

ve gerekeni yapıyor :)
rogue-one

3
O değil. İhtiyaç duyulan şey, verilen dizinden vim içinden özyinelemeli dosyalardır . Koşulları çöpe kate **/*(^/)atıyorsanız , (zsh globbing sözdizimini kullanarak) gerekeni yaptığını söyleyebilirsiniz : Verilen dizindeki dosyaları özyinelemeli olarak açar. "İçeriden" değil ve vim'i hiç kullanmıyor, ama "henüz gerekeni yapıyor". Veya hatta kate ~/.vimrc ~/.bashrc. "Verilen dizinden", "verilen dizinden" ve "özyinelemeli" tamamen çıkarılır, ancak "henüz gerekeni yapar": dosyaları açar.
ZyX

Bu, dosyaları birer birer açar
Paul

1

Argüman listesine eklemek isterseniz;

:arga what_you-d_like_to_add

görmek

:he arga

Daha fazla bilgi için / in vim.

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.