2009-08-18 14 views
63

Chcę uruchomić makro, które właśnie nagrałem w rejestrze "x" na każdej linii otwartego bufora, od mojego kursora do końca bufora, w vim. Jak mogę to zrobić?powtórzyć makro vim do końca bufora

wiem, że mogę odtworzyć makro n razy:

[email protected] 

... lub po prostu przytrzymaj @ dopóki nie osiągnie ostatnią linię, ale chcę po prostu uderzył kilka klawiszy i być wykonane z to.

Z góry dziękuję.

+0

15 @ x nie działa na Windows gVim –

Odpowiedz

77

osobiście robię

VG:normal @x 

Edycja: zmieniła się zarejestrować w jednym podałeś

+0

Niezły. Podoba mi się, że to rozwiązanie działa tylko na wybranym obszarze. – Kevin

+0

Zmapowałem to do nnoremap <[email protected]> VG: norm @ q PAS

5

[email protected], chyba że masz bardzo duży bufor ...

+3

dlaczego nie tylko '%: normalny @ x' lub '1, $: normal @ x'? –

+3

to zdecydowanie bardziej eleganckie rozwiązanie - myślę, że '99999 @ x' jest po prostu rzeczą naturalną, którą wymyślisz, gdy się spieszysz :) – Peter

+1

Nie będzie 9999999 @ x uruchom go wiele razy w ostatnim wierszu, chyba że masz dokładnie 999999 linii? –

17

zrobić makro rekurencyjne:

[email protected] 

ex:

[email protected] 

To będzie pierwsze słowo konwersji małych liter od bieżącej linii do koniec pliku z pojedynczym @a. Ale upewnij się „rejestr jest pusty:

let @a="" 
+3

Doskonały. Takie podejście jest bardziej użyteczne niż podejście "%: normal", ponieważ honoruje dowolne ruchy linii w makrze, więc jest użyteczne tam, gdzie linie nie mają identycznej postaci. Łatwiej jest utworzyć makro "a", aby zdefiniować akcję, a następnie makro "b" wykonać bit rekurencyjny, tj. Qb @ a @ bq. –

+2

Unikaj tego, jeśli makro wymaga wyszukiwania, ponieważ będzie kontynuowane od góry. 'ctrl-c', aby zatrzymać, jeśli tak się stanie! –

+2

@IainBallard, ': set nowrapscan' powoduje awarię i zatrzymuje się po dojściu do końca pliku. – ericbn

53

Można to zrobić (w trybie poleceń)

:%normal @x 
0

Z vim wiki, wersja skrócona: qqqqq nagrać makro @qq aby zakończyć nagrywanie @q ją wykonać (i potrwa aż do końca pliku)

+1

Proszę, czy możesz dodać odniesienie do dokumentacji? – aturegano

+1

@aturegano Myślę, że autor zamierzał użyć makra rekursywnego. Aby uzyskać więcej informacji, zobacz [The Vim Wiki: Record a Recursive Macro] (http://vim.wikia.com/wiki/Record_a_recursive_macro). – dylnmc

Powiązane problemy