arabelleğin sonuna kadar bir vim makrosunu yeniden oynat


85

xİmlecimden ara belleğin sonuna kadar açık bir arabelleğin her satırında " " kaydına kaydettiğim bir makroyu vim'de çalıştırmak istiyorum . Bunu nasıl yaparım?

Makroyu n kez yeniden oynatabileceğimi biliyorum:

15@x

... ya @da son satıra gelene kadar basılı tutun , ancak sadece birkaç tuşa basmak ve işimi bitirmek istiyorum.

Şimdiden teşekkürler.


15 @ x Windows gVIM'de çalışmıyor
Mingjiang Shi

Yanıtlar:


102

Şahsen yapardım

VG:normal @x

Düzenle: belirttiğiniz kayıtla değiştirildi.


Güzel bir. Bu çözümün yalnızca seçilen alanda çalışmasını seviyorum.
Kevin

Bunu nnoremap <C - @> VG: norm @ q <CR> ile eşledim
PAS

Bunu "1z =] s" makrosuyla denedim ama sadece her satırın ilk kelimesini yazım-düzelterek geri kalanını atlıyor.
uygun

@elig muhtemelen tüm satırlarda eksik kelimeleri bulacak özyinelemeli bir makro yapmak istersiniz.
raman

67

Yapabilirsin (komut modunda)

:%normal @x

Bu çözümü beğendim, ancak makroyu tamponun her satırında çalıştıracağım, OP sadece imlecinden sonuna kadar sordu.
Porunga

24

özyinelemeli makro yapın:

qa@aq

ör .:

qa0gUwj@aq

Mevcut satırdan dosyanın sonuna kadar tek @a ile UPCASE ilk kelimesini kullanır. Ancak "kayıtların boş olduğundan emin olun:

let @a=""

3
Mükemmel. Bu yaklaşım, %:normalmakro içindeki herhangi bir çizgi hareketini karşıladığı için yaklaşımdan daha kullanışlıdır , bu nedenle çizgilerin formda aynı olmadığı durumlarda kullanışlıdır. Eylemi tanımlamak için bir 'a' makrosu oluşturmayı ve ardından 'b' makrosunun özyinelemeli biti yapmasını, yani qb @ a @ bq'yi daha kolay buluyorum.
Paul Ruane

3
Yukarıdan devam edeceği için, makronuz bir arama içeriyorsa bundan kaçının. ctrl-cbu olursa durdurmak için!
Iain Ballard

3
@IainBallard, :set nowrapscandosyanın sonuna ulaşıldığında başarısız olmasını ve durmasını sağlar.
ericbn

1
Bir kayıt temizlemek için, basitçe yapmak qaqmakro önce: qaqqa0gUwj@aq. Ek olarak, @qsonuna koymayı unutursanız , her zaman qAbir kayıt eklemeye başlayabilir ve sonra yapabilirsiniz @q. Genellikle bazı nedenlerden dolayı reg q'ya kayıt yaparım çünkü bu kolaydır (özellikle özyinelemeli makrolar için) ve genellikle qqqqqgUiwj@qqiki makro yerine yapmak zorunda kalır . İlk üç qkayıt temizlenir, ikinci iki qkayıt başlar. Bkz. Vim.wikia.com/wiki/Record_a_recursive_macro
dylnmc

abasit bir qaq
yazım

12

999999@xçok büyük bir tamponunuz yoksa ...


6
neden sadece %:normal @xya da değil 1,$:normal @x?
Nathan Fellman

3
bu kesinlikle daha zarif bir çözüm - sanırım 99999@xaceleniz olduğunda bulduğunuz doğal şey :)
Peter

2
Tam olarak 999999 satırınız yoksa 9999999 @ x son satırda birçok kez çalıştırmaz mı?
David Oneill

2
Sadece denedim. Oturumu kapatır. Muhtemelen hattın sonunda durmadan milyonlarca kez çalıştırmaya devam ediyor.
CDR

1
En azından bazı durumlarda bu beklendiği gibi davranmaz. Find next / find prev ile bir makro oluşturmayı düşünün . Böylece, makro tekrarı dosyanın sonuna ulaştığında, baştan devam edecektir. konuyla ilgili vim doc . Arama sarmalamayı önlemek için kullanmak isteyebilirsiniz : set nowrapscan . Bu benim bulabileceğim bir örnek, ancak bu artık olmadığı anlamına gelmez. :% normal @x, yukarıdaki cevabında @ ryan_s'nin önerdiği gibi gitmenin bir yoludur.
Sergey Markelov

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.