Bir dosya klasöründe bir işlevi veya makroyu nasıl çalıştırabilirim?


12

Diyelim ki adlı bir fonksiyonum var StripWhitespace.

Dosyayı açıp çalıştırarak tek bir dosyada çalıştırabilirim :StripWhitespace.

Bu işlevi bir dosya klasörüne karşı otomatik olarak nasıl çalıştırabilir ve devam ederken sonuçları nasıl kaydedebilirim?


3
Detaylar, lütfen!
200_success

Yanıtlar:


10

Bağımsız -cdeğişkeni başlangıçta bir komut çalıştırmak için kullanabilirsiniz vim(1):

   -c {command}
               {command} will be executed after the first  file  has  been
               read.   {command}  is interpreted as an Ex command.  If the
               {command} contains spaces it must  be  enclosed  in  double
               quotes  (this depends on the shell that is used).  Example:
               Vim "+set si" main.c
               Note: You can use up to 10 "+" or "-c" commands.

Misal:

vim -c ':call StripWhitespace()' file1 file2

Daha sonra çıkmak için şunu ekleyin | :wqa:

vim -c ':call StripWhitespace() | :wqa' file1 file2

1
İsterseniz: argdo, bunu komut
satırında

19

Zaten Vim'deyseniz, bağımsız değişken listesindeki veya arabellek listesindeki her öğede bir komut yürütmek için :argdoveya :bufdokomutlarını kullanabilirsiniz .

örneğin :, bağımsız değişken listesindeki her dosyada komut çalıştırmak için :

:argdo StripWhitespace

Veya arabellek listesindeki her dosyadan bir işlev çağırmak için:

:bufdo call StripWhitespace()

Veya qbağımsız değişkenler listesindeki her dosyada makro çalıştırmak için:

:argdo normal @q

Daha sonra değiştirilen tüm tamponları ile :wallkaydedebilir veya tümünü kaydedip Vim ile çıkabilirsiniz :wqall.

Dosyaları ilerledikçe yazmak istiyorsanız, şu şekilde bir çağrı ekleyebilirsiniz :update:

:argdo s/foo/bar/ge | update

Dosyaları Vim'e ilk etapta almanın çeşitli yolları vardır, örneğin:

  • Parametreleri vim komut satırına sağlayın: vim *(bu, tüm dosyaları argüman listesine ekler),
  • Kullanım :argsargüman listesi veya doldurmak için (joker karakterler ve backtick ifadeleri destekler) komutunu :argaddbuna dosyaları eklemek komutu,
  • Sadece tüm manuel onları açmak :e, :Exya da bir dosya açma eklentisi.

1
Bu cevabı beğendim çünkü bence çok pahalı olan Vim'den ayrılmayı gerektirmiyor (değerli tampon listem!!). Bazı notlarım var: (1) arabellekleri yazmadan bırakmak 'hidden'ayarlanmalıdır; (2) : updatekomut üzerine biraz ilerleme kaydetmiş durumda :wbu nedenle, bir değişiklik yapıldıysa sadece yazar çünkü :bufdo updateya :argdo updatetüm modifiye tamponlar veya argümanlar yazacak.
tommcdo

İyi bir noktaya değindim update. hiddenCevabı yazarken bahsetmeyi düşündüm, ama buna karşı karar verdim çünkü fazla karmaşıklaştırmak istemedim. Yansıması üzerine, orada olmalı. Cevabı şu anda her iki öneriyi de içerecek şekilde güncelleyeceğim.
Zengin

@tommcdo Duvar belgelerini kontrol ettim ve yalnızca değiştirilen arabellekleri yazdı, bu yüzden: bufdo güncellemesi gerekli değil.
Zengin

:walltamponlar arasında bisiklete binmeme ve sizi başladığınız yerden uzaklaştırma avantajına sahip olan iyi bir yakalama . Sanırım :argdo updatehala farklı bir hikaye - belki de argüman listenizde olmayan tamponlara yazmak istemezsiniz.
tommcdo

@tommcdo İyi bir nokta.
Zengin
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.