Zoeken…
Een macro opnemen
Een manier om een macro te maken is om deze op te nemen .
Begin met het opnemen van een macro en sla deze op in een register (in dit voorbeeld gebruiken we a
, maar dit kan elk register zijn waaraan u normaal gesproken tekst kunt rukken):
qa
Voer vervolgens de opdrachten uit die u in de macro wilt opnemen (hier omringen we de inhoud van een regel met <li>
-tags):
I<li><ESC>A</li>
Wanneer we klaar zijn met de opdrachten die we in de macro willen opnemen, stopt u de opname:
q
Wanneer u nu de opgenomen reeks opdrachten wilt uitvoeren die zijn opgeslagen in a
, gebruikt u:
@a
en vim zal de opgenomen reeks herhalen.
De volgende keer dat je de laatste macro wilt herhalen die je hebt gebruikt, kun je @
typen:
@@
En als een extra bonus is het goed om te onthouden dat als je een nummer voor een opdracht plaatst, dit het zo vaak zal herhalen. Dus, herhaal je de macro opgeslagen in het register a
20 maal met:
20@a
Een vim-macro bewerken
Soms maak je een fout met een lange macro, maar bewerk je deze liever dan helemaal opnieuw op te nemen. U kunt dit doen met behulp van het volgende proces:
Zet de macro op een lege regel met
"<register>p
.Als uw macro is opgeslagen in register
a
, is de opdracht"ap
.Bewerk de macro indien nodig.
Trek de macro in het juiste register door de cursor naar het begin van de regel te verplaatsen en
"<register>y$
.U kunt het oorspronkelijke register opnieuw gebruiken of een ander gebruiken. Als u register
b
wilt gebruiken, is de opdracht"by$
. Of door"<register>d$
(verwijdert de ongebruikte regel)
Recursieve macro's
Vim-macro's kunnen ook recursief zijn. Dit is handig als u tot het einde van het bestand op elke regel (of ander tekstobject) moet handelen.
Begin met een leeg register om een recursieve macro op te nemen. (Een register kan worden geleegd met q<register>q
.)
Kies een consistent startpunt op elke regel om te beginnen en eindigen.
Voordat u de opname beëindigt, roept u de macro zelf op als het laatste commando. (Daarom moet het register leeg zijn: het doet dus niets, omdat de macro nog niet bestaat).
Voorbeeld, gegeven de tekst:
line 1
line 2
line 3
foo bar
more random text
.
.
.
line ???
In de normale modus, met de cursor op de eerste regel en een leeg register a
, zou men deze macro kunnen opnemen:
qaI"<Esc>A"<Esc>j@aq
Dan zouden met een enkele aanroep van @a
alle regels van het bestand nu tussen dubbele aanhalingstekens staan.
Wat is een macro?
Een macro is een reeks toetsaanslagen die bedoeld zijn om zonder enige vertraging door Vim te worden "afgespeeld". Macro's kunnen worden opgeslagen in registers of variabelen, gebonden aan toetsen of worden uitgevoerd op de opdrachtregel.
Hier is een eenvoudige macro die het derde word
op een regel in hoofdletters zet:
0wwgUiw
Die macro kan worden opgenomen in register q
:
qq start recording into register q
0wwgUiw
q stop recording
of direct opgeslagen in register q
:
:let @q = '0wwgUiw'
om af te spelen met:
@q
Maar het kan ook direct in de opdrachtregel worden getypt:
:normal 0wwgUiw
voor direct afspelen via het :normal
commando.
Of zet in een variabele:
:let myvar = '0wwgUiw'
om af te spelen met:
@=myvar
Of opgeslagen als een afbeelding:
nnoremap <key> 0wwgUiw
af te spelen door op <key>
.
Als u een macro wilt opslaan voor later hergebruik, kunt u in de invoegmodus typen:
<C-r>q
Dit voegt de macro in register q
(in dit voorbeeld: 0wwgUiw
). U kunt deze uitvoer gebruiken om bijvoorbeeld de macro in uw vimrc
te definiëren:
let @q='0wwgUiw'
Hierdoor wordt het register q
met deze macro geïnitialiseerd telkens wanneer u vim start.
Actie opnemen en opnieuw afspelen (macro's)
met q
commando zouden we een hoop saai werk in vim kunnen vereenvoudigen.
voorbeeld 1. genereer een reeks reeksen (1 tot 20).
STAP 1. Druk op i
om de invoegmodus te openen, invoer 1
1
STAP 2. Neem de volgende actie op: "voeg het laatste nummer toe aan de volgende regel en verhoog het nummer"
- typ
esc
om de invoermodus te verlaten - typ
qa
om de opnamemodus te openen, met behulp van buffera
- typ
yy
enp
om de huidige regel te kopiëren en deze als de volgende regel te plakken - typ
ctrl
+a
om het nummer te verhogen - typ nogmaals
q
om het opnemen te voltooien
1
2
STAP 3. Speel de actie 18 keer opnieuw.
type 18@a
om actie 3 en actie 4 in stap 2 opnieuw af te spelen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20