Kaydımı nasıl görebilirim ve düzenleyebilirim (yani kaydedilmiş makro)?


38

İşlemlerimi kaydetmek için ( qqkayıt, bazı işlemler , qdurmak için) karmaşık tekrarlar kullanıyorum ve bir hata yaptım.

Neyi kaydettiğimi görmek ve hatayı tekrar yapmak yerine düzeltmek mümkün mü?

Kayıtlı karakterleri @qeserlere göre çağırmak , ancak haritalarımda ( :map q- No mapping found) göremiyorum .

Ve yazarak yardım çok bilgi yok: :help recording.

Yanıtlar:


41

Not: aBu cevabın tamamı için kayıt defterini kullandığınızı kabul ediyorum , ancak herhangi bir kaydı kullanabilirsiniz.

Not 2: <1b>olduğu Esc; Ctrl+vve ile bunu ekleyebilirsiniz Esc. Ayrıca ^[( displayayara bağlı olarak) olarak da gösterilebilir .


Bu bir haritalama değil; bu işe :mapyaramazsa mantıklı geliyor . Bir kayıt defterine kaydedilir ve herhangi bir kayıt defteri gibi görebilir ve düzenleyebilirsiniz.

Bütün qdoes "Bu kayıt temizleyin ve bunun için herhangi bir tuş vuruşu ekler" , ve hepsi @olup yapar "komutları gibi bir kayıt değerlendirmek" .

Bir makro hakkında "farklı" bir şey yoktur, herhangi bir kaydı makro olarak çağırabilirsiniz.


To görüntülemek sadece kullanımını:

:echo @a

Sadece herhangi bir kayıt gibi.

:registersTüm kayıtları görüntülemek için de kullanabilirsiniz .


To düzenlemek birkaç şey yapabilirsiniz:

Sadece atamanın en basit yolu @a, şunun gibi:

:let @a='iasd<1b>'

Bu, insert modunu ( i) başlatır asdve normal moda döner.

Bu kapsamlı düzenleme için çok kullanışlı değil; işlevleri (yani substitute()) kullanabilir veya belki bir şey ekleyebilir ( :let @a=@a . 'more'), ancak ortadaki bir şeyi değiştirmek o kadar kolay değildir.

Bunun için en iyi yolun, yeni bir arabellek başlatmak :splitveya :tabnewkaydetme ve oraya ekleyerek, düzenleyerek ve sonra geri kopyalayarak kayıt defterini düzenlemektir.

"apMetni arabellek içine yerleştirecek olanı kullanabilirsiniz ( akaydınız nerede ):

iThis is A<1b>

Şimdi çizgiyi belki olarak değiştirebilirim:

iThis is an edited macro<1b>

Sonra ^v$"aybu satırı aregister'a kopyalamak için yapıyorum :

  • ^ hattın başlangıcı için
  • v görsel mod için
  • $ satır sonu için
  • "ay seçimi kaydetmek a

İsterseniz görsel modunu kullanmadan da yapabilirsiniz ^"ay$.

Şimdi @a, başlangıçta kaydettiğiniz şeymiş gibi kullanabilirsiniz.

Ayrıca sadece biraz daha hızlı olan yyve ardından kullanabilirsiniz @". Bu aynı zamanda izleyen yeni satırı kopyalar ve yan etkilere neden olabilir ... Bunu daha hızlı yapmanın başka bir yolu da makro kullanmaktır :-)


2
Kayıt defterinize doğrusal bir hareket getirmenin Enter, kayıt sonunda tuşuna bastığınız gibi yeni bir satır karakteri eklemenin bir yan etkisi olacağını unutmayın . Çoğu durumda bu iyi huylu olabilir, ancak kaydın sonundaki imleç konumunu dikkatle hazırladığınız senaryolarda, tekrarlanabilirliği etkileyebilir.
tommcdo

@tommcdo Sağ; Sadece vtüm çizgiyi kullanabilir ve seçebilirsiniz (yeni satır olmadan).
Martin Tournoij,

@Carpetsmoker " v^$"aybu satırı akayıt defterine yank (kopyala) ." Bundan ^önce gelmemeli miydin v, ve $hala yeni çizgiyi kopyalamıyor musunuz? Olması gerektiğini düşünüyorum: 0v$h"ay(evet çok acı!)
joeytwiddle

2
@joeytwiddle hayır, $hareket etmek satırın sonuna, ancak yeni satır içermez. Bu arasındaki fark bu 0y$ve yy. Bundan hsonra koymak $, sadece son karakteri kaçıracağınız anlamına gelir.
evilsoup

Düzenleme yapmak için yapabileceğiniz bir şey: let @ a = komutları daha kolay düzenlenebilir komutlar yazmaktır: <Ctrl-f>, ilgili satırı seçin ve düzenleyin (düzenleme yapıyorsanız, varsayılan olduğu son satır) girdiğiniz son satır) normalde vim kullanarak. Satırı gerçekleştirmeyi tamamladığınızda return tuşuna veya çıkmak için <Ctrl-c> tuşlarına basın.

9

Çalışacak bir şey almak için ...

qajjjq

Makroya makro kaydetmeye başlayacaktır a.

Geçerli kayıtlarınızın birçoğunu (makrolar, çengelleme, silme vb. İçin) :regkomutla görebilir veya adını girerek görüntülemek için bir kayıt belirtebilirsiniz. Örneğin, kayıt göstermek için a:

:reg a

verim

--- Registers ---
"a   jjj

İlgili büyük harfi kullanarak mevcut bir adlandırılmış kayıt listesine ekleyebilirsiniz. Bu sadece makro kaydetme için değil, yanma için de geçerlidir. Örneğin:

qAkkkq
:reg a

verim

--- Registers ---
"a   jjjkkk

Varolan bir makroyu düzenlemek için let sözdizimini kullanmak istiyorsanız, şunları yapabilirsiniz:

let @a='<C-r>a'

hangi genişleyecek

let @a='jjjkkk'

ve sonra bireysel tuş vuruşlarını değiştirebilirsiniz.

<C-r>Herhangi bir kayıttan komut satırı moduna (ya da bunun için ekleme modunda) yapıştırmak için (yani kontrol + r) kullanabileceğinizi unutmayın.

Ayrıca, komut satırı modundayken, bunu yazarsanız <C-f>, verilen komutları görebileceğiniz / düzenleyebileceğiniz komut komutunu açacak ve geçerli komutunuzu aramadan önce düzenleyebilirsiniz. Göndermek istediğiniz komutu girin.

Bunun yararı, makro'nuzu düzenlemek için normal hareket / ikame komutlarınızı bu tamponun içinde kullanabilmenizdir. Örneğin:

let @a='<C-r>a'<C-f>

getirecek:

:118 reg
:119 reg a
:120 let @a='jjjkkk'

120 emrindeyseniz, şunları yapabilirsiniz:

s/kkk/}
<return>
:reg a

verim

--- Registers ---
"a   jjj}

Elbette, yazıcının içeriğini ara belleğinize yapıştırabilir ve orada değiştirebilirsiniz. Ancak, çalışma tamponunuzu kirletmeden ihtiyacınız olan her şeyi yapabilirsiniz.

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.