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:

  1. Zet de macro op een lege regel met "<register>p .

    Als uw macro is opgeslagen in register a , is de opdracht "ap .

  2. Bewerk de macro indien nodig.

  3. 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"

  1. typ esc om de invoermodus te verlaten
  2. typ qa om de opnamemodus te openen, met behulp van buffer a
  3. typ yy en p om de huidige regel te kopiëren en deze als de volgende regel te plakken
  4. typ ctrl + a om het nummer te verhogen
  5. 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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow