Uwaga: Zakładam, że używasz a
rejestru do całej odpowiedzi, ale możesz użyć dowolnego rejestru
Uwaga 2: <1b>
jest Esc; możesz to wstawić za pomocą, Ctrl+va następnie Esc. Może się również pojawiać jako ^[
(w zależności od display
ustawienia).
To nie jest mapowanie; więc ma sens, że :map
to nie działa. Jest rejestrowany w rejestrze i można go wyświetlać i edytować jak każdy rejestr.
Wszystko, co qrobi, to „wyczyść rejestr i dołącz do niego każde naciśnięcie klawisza” , a wszystko, co @zrobi, to „oceń rejestr jako polecenia” .
W makrze nie ma nic „innego”, możesz wywołać dowolny rejestr jako makro.
Aby wyświetlić, użyj:
:echo @a
Tak jak każdy rejestr.
Możesz także użyć :registers
do przeglądania wszystkich rejestrów.
Aby edytować , możesz zrobić kilka rzeczy:
Najprostszym sposobem na przypisanie @a
tego jest:
:let @a='iasd<1b>'
Spowoduje to uruchomienie trybu wstawiania ( i
), wstawiania asd
i powrotu do normalnego trybu.
Nie jest to bardzo przydatne w przypadku obszernej edycji; możesz użyć funkcji (np. substitute()
), a może dodać coś ( :let @a=@a . 'more'
), ale zmiana czegoś w środku nie jest taka łatwa.
Przekonałem się, że najlepszym sposobem na to jest uruchomienie nowego bufora za pomocą :split
lub :tabnew
i edycja rejestru poprzez włożenie go, edycję, a następnie skopiowanie z powrotem.
Możesz użyć, "apktóry wstawi tekst do bufora (gdzie a
jest twój rejestr):
iThis is A<1b>
Teraz mogę po prostu zmienić linię na:
iThis is an edited macro<1b>
Następnie robię, ^v$"ayaby szarpnąć (skopiować) ten wiersz do a
rejestru:
- ^ na początek linii
- v dla trybu wizualnego
- $ na koniec linii
- "ay wybierz opcję rejestracji
a
Jeśli chcesz, możesz to zrobić bez użycia trybu wizualnego z ^"ay$.
Możesz teraz używać @a, jakby to było to, co pierwotnie nagrałeś.
Możesz także użyć yy, a następnie @", co jest nieco szybsze. Spowoduje to również skopiowanie końcowego nowego wiersza i może powodować skutki uboczne ... Innym sposobem na przyspieszenie tego jest użycie makra :-)
Enter
na końcu swojego nagrania. W wielu przypadkach może to być łagodne, ale w scenariuszach, w których starannie dobrałeś pozycję kursora na końcu nagrania, może to wpłynąć na powtarzalność.v
i wybrać całą linię (bez nowej linii).v^$"ay
szarpać (kopiować) tę linię doa
rejestru”. Czy nie powinno to^
nastąpić przedv
i$
czy nadal nie kopiujesz nowej linii? Myślę, że powinno to być:0v$h"ay
(tak boleśnie długie!)$
przesuwa się na koniec linii, ale nie zawiera nowej linii. To różnica między0y$
iyy
. Umieszczenieh
po tym$
oznaczałoby, że przegapiłbyś ostatnią postać.Aby uzyskać coś do pracy z ...
Rozpocznie rejestrowanie makra w
a
rejestrze.Możesz wyświetlić wiele swoich bieżących rejestrów (używanych do makr, szarpania, usuwania itp.) Za pomocą
:reg
polecenia lub możesz określić rejestr do wyświetlenia, podając jego nazwę. Na przykład, aby wyświetlić rejestra
:daje
Możesz dołączyć do istniejącego rejestru nazwanego, używając odpowiedniej dużej litery. Działa to nie tylko do nagrywania makr, ale także do szarpania. Na przykład:
daje
Jeśli chcesz użyć składni let do edycji istniejącego makra, możesz:
która rozwinie się do
i możesz następnie zmieniać poszczególne naciśnięcia klawiszy.
Zauważ, że możesz użyć
<C-r>
(to znaczy, control + r), aby wkleić z dowolnego rejestru do trybu wiersza poleceń (lub w tym przypadku w trybie wstawiania).Ponadto, gdy jesteś w trybie wiersza poleceń, jeśli go wpiszesz,
<C-f>
pojawi się okno wiersza polecenia, w którym możesz zobaczyć / edytować poprzednie wydane polecenia, a także możesz edytować bieżące polecenie przed jego wywołaniem. Naciśnij enter na poleceniu, które chcesz przesłać.Zaletą tego jest to, że możesz użyć swoich normalnych poleceń ruchu / podstawiania w tym buforze, aby edytować makro. Na przykład:
przyniesie:
Jeśli masz komendę 120, możesz:
daje
Możesz oczywiście wkleić zawartość rejestru do bufora i tam go zmienić. Ale możesz zrobić wszystko, czego potrzebujesz, nie zanieczyszczając bufora roboczego.
źródło