Vim'de makroyu bir dizi satıra nasıl uygularım?


222

Bir sürü satır içeren bir dosyam var. Tek bir satırda işlem yapan bir makro kaydettim. Bu makroyu dosyada kalan tüm satırlarda tekrarlamak istiyorum. Bunu yapmanın hızlı bir yolu var mı?

Ctrl + Q'yu denedim, bir dizi çizgiyi vurguladım ve @@'a bastım, ancak bu hile yapmıyordu.


Offtopik soru: VIM makrolarının farkında değildim (veya farkında olmak istemedim: P) VIM makrolarında hoş bir "tembel okuyucu" yönlendirmeli bağlantınız var mı?
OscarRyz

Elbette, bu: oreillynet.com/mac/blog/2006/07/… bunu oldukça iyi özetliyor.
Jordan Parmer

Ayrıca kontrol edebilirsiniz: o karmaşık vim içeriden tekrar
Sam

Yanıtlar:


355

Makroyu birden çok / tüm satırlarda yürütmek için Ex modunda normal komutu kullanın :

Kayıt saklanan makro yürütme a 10 arasındaki hatlar 5 üzerinde.

:5,10norm! @a

Kayıt saklanan makro yürütme a dosyanın sonuna kadar çizgileri 5 üzerinde.

:5,$norm! @a

Kayıt saklanan makro Yürütme a tüm hatlarda.

:%norm! @a

Kayıt makro mağaza Yürütme a uyan tüm hatlarda desen .

:g/pattern/norm! @a

Makroyu görsel olarak seçilen satırlarda yürütmek için , istediğiniz bölge seçilene kadar V ve j veya k tuşlarına basın . Ardından :norm! @aaşağıdaki giriş satırının gösterildiğini yazın ve gözlemleyin.

:'<,'>norm! @a

Enter : daha fazlasını okumak için vim'de normal yardım .


1
Evet,: vim veya az önce eklediğim bağlantıda normal yardım.
Yargıç Maygarden

1
Emacs olmayan bir kullanıcı yardımcı olmak için her şey!
Yargıç Maygarden

48
Güzel!! Başlangıç ​​ipucu: İstediğiniz satırları vurgulamak için V sonra j / k kullanın, sonra sadece yazın:norm! @a
Kevin Bourrillion 22:11

7
@KevinBourrillion'dan çok yararlı ipucu eklemek için, :satırları vurguladıktan sonra düğmesine basarken , Ex giriş satırı bunun yerine :'<,'>Kevin'in önerdiklerinin geri kalanını ekleyeceğinizi okuyacaktır . Bu son komut okumak yapacaktır: :'<,'>norm! @a.
Deiwin

3
@GabeMoothart !Kullanıcıların anahtarların yeniden eşlenmesini önler. İhtiyacınız olmayabilir, ancak herkes için çalışan bir cevap gerektirir.
Yargıç Maygarden

60

Kullan küresel makro 'a' içeren tüm hatlarda 'desen' çalıştırmak için

:g/pattern/normal! @a

Yardım için kontrol edin: :help global.


4
Sadece gelecekteki kullanıcılar için açıklama için: bu global bir Ex komutu.
atp

39

Bunu da yapabilirsiniz:

Normal modda:

[number of times to apply the macro] @ [register]

Örneğin:

1000@q

Q kaydındaki makroyu sonraki 1000 satıra uygular.

Güncelleme: kabul edilen cevap çok daha iyi

Güncelleme: @kevinliu'nun işaret ettiği gibi, muhtemelen bir jsonraki satıra gitmek için makroyu bir ile bitirmek istersiniz.


4
Bu son satırda durur ve korktuğum son satırda birden fazla işlem yapmaz.
Hubro

@Hubro, diğer kullanıcıların bu cevapları benim için çalıştı: :%norm! @avevGG :norm! @a
Max Heiber

2
Bazı nedenlerden dolayı, bu harika çalıştı ve kabul edilen cevap olmadı. Makrom, yeni bir satır eklemeyi, bir şeyler yapmayı ve bir sonraki satıra geçmeyi içeriyordu.
jasonszhao

@jasonszhao evet burada aynı. ama 1000 dememek için yine de var ama sonuna kadar tüm satırlar .. ve hala yeni bir çizgiyle ilgileniyor, bir şeyler yapıyor vb.
ihightower

2
Bence makronuzun bir jsonraki satıra geçmek için bir komutla bitmesi gerektiğine dikkat çekilmelidir , aksi takdirde aynı satıra uygulamaya çalışacaktır.
Kevin Liu

2

RangeMacro adında bir eklenti de var, tam olarak istediğinizi yapıyor! İsme göre tahmin edemeyen herkes için ne yapar: görsel seçim veya bir: 40,50 /: +10 olsun, belirli bir aralıktaki her satır için kaydedilmiş bir makroyu tekrarlar

Bkz. Http://www.vim.org/scripts/script.php?script_id=3271

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.