Sök…


Spela in ett makro

Ett sätt att skapa ett makro är att spela in det.

Börja spela in ett makro och spara det i ett register (i det här exemplet använder vi a , men det kan vara vilket register du normalt kan lämna text till):

qa

Kör sedan kommandona du vill spela in i makroen (här omger vi innehållet i en rad med <li> -taggar):

I<li><ESC>A</li>

När vi är klara med kommandona som vi vill spela in i makro, stoppa inspelningen:

q

Nu, när vi vill utföra den inspelade sekvensen med kommandon lagrade i a , använd:

@a

och vim kommer att upprepa den inspelade sekvensen.

Nästa gång du vill upprepa det sista makroet som användes kan du skriva @ :

@@

Och som en extra bonus är det bra att komma ihåg att om du lägger ett nummer före ett kommando kommer det att upprepa det så många gånger. Så du upprepa makrot sparas i registrera a 20 gånger med:

20@a

Redigera en vim-makro

Ibland gör du ett misstag med ett långt makro, men vill snarare redigera det än att spela in det helt igen. Du kan göra detta med följande process:

  1. Sätt makroen på en tom rad med "<register>p .

    Om ditt makro sparas i register a är kommandot "ap .

  2. Redigera makro efter behov.

  3. Släpp makro till rätt register genom att flytta markören till början av raden och använda "<register>y$ .

    Du kan återanvända det ursprungliga registret eller använda ett annat. Om du vill använda register b är kommandot "by$ . Eller med "<register>d$ (raderar den oanvända raden)

Rekursiva makroer

Vim-makron kan också vara rekursiva. Detta är användbart för när du behöver agera på varje rad (eller annat textobjekt) till slutet av filen.

För att spela in ett rekursivt makro, börja med ett tomt register. (Ett register kan tömmas med q<register>q .)

Välj en konsekvent startpunkt på varje rad för att starta och avsluta.

Innan du avslutar inspelningen, anropa själva makroen som det sista kommandot. (Det är därför registret måste vara tomt: så det gör ingenting, eftersom makroen inte existerar ännu).

Exempel, med texten:

line 1
line 2
line 3
foo bar
more random text
.
.
.
line ???

I normalt läge, med markören på den första raden och ett tomt register a , kan man spela in detta makro:

qaI"<Esc>A"<Esc>j@aq

Sedan med en enda @a av @a , skulle alla filens rader nu vara i dubbla citat.

Vad är ett makro?

Ett makro är en serie tangenttryckningar som är avsedda att "spelas upp" av Vim utan fördröjning. Makron kan lagras i register eller variabler, bundna till nycklar eller köras på kommandoraden.

Här är en enkel makro som bokstäver det tredje word på en rad:

0wwgUiw

Den makroen kan spelas in i registret q :

qq         start recording into register q
0wwgUiw    
q          stop recording

eller sparas direkt i registret q :

:let @q = '0wwgUiw'

som ska spelas upp med:

@q

Men det kan också skrivas direkt i kommandoraden:

:normal 0wwgUiw

för omedelbar uppspelning via kommandot :normal .

Eller lägg till en variabel:

:let myvar = '0wwgUiw'

som ska spelas upp med:

@=myvar

Eller sparas som en kartläggning:

nnoremap <key> 0wwgUiw

som ska spelas upp genom att trycka på <key> .

Om du vill lagra ett makro för senare återanvändning kan du skriva i insertläge:

<C-r>q

Detta infogar makro i registret q (i detta exempel: 0wwgUiw ). Du kan använda denna utgång t.ex. för att definiera makro i din vimrc :

let @q='0wwgUiw'

På så sätt initieras registret q med detta makro varje gång du startar vim.

Spela in och spela igen handling (makron)

med q kommandot kunde vi förenkla mycket tråkigt arbete i vim.

exempel 1. generera matrisekvens (1 till 20).

STEG 1. tryck på i att gå in i insättningsläge, ingång 1

1

STEG 2. Spela in följande åtgärd: "lägg till det sista numret till nästa rad och öka numret"

  1. skriv esc att lämna ingångsläget
  2. skriv qa att gå in i inspelningsläge med buffert a
  3. skriv yy och p att kopiera aktuell rad och klistra in den som nästa rad
  4. skriv ctrl + a att öka antalet
  5. skriv q igen för att avsluta posten
1
2

STEG 3. Spela igen åtgärden 18 gånger.

typ 18@a att spela igen åtgärd 3 och åtgärd 4 i steg 2.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow