Kiedy nagrywam makro q
i gotowe, mogę wpisać:
q
aby zatrzymać nagrywanie, jeśli jestem w trybie normalnym lub wizualnym.<c-o>q
aby zatrzymać nagrywanie, jeśli jestem w trybie wstawiania...
Jak zatrzymać nagrywanie, jeśli moje makro kończy się w trybie poleceń?
command-line
register
macro
iago-lito
źródło
źródło
:'<,'>s/toBeReplaced//g
a następnie umieści kursor między nimi//
, aby wszystko, co musiałem zrobić, to pisaćnewString<cr>
i gotowe. :)Odpowiedzi:
Innym rozwiązaniem jest przejście do trybu wiersza poleceń za pomocą
Ctrl-f
i naciśnij,q
aby zatrzymać nagrywanie.Ctrl-f
pozwala otworzyć okno wiersza poleceń, w którym możesz edytować polecenie w trybie normalnym. Aby zatwierdzić polecenie, po prostu użyj enter.Dlatego po dodaniu czegoś takiego:
w twoim
.vimrc
możesz użyć,<c-q>
aby zatrzymać nagrywanie makra w trybie poleceń.Florent
źródło
^F
) z końca makra, prawda? Przynajmniej tak widzę.qqSTARTMACRO:STARTCOMMANDLINEPART<c-f>i<c-o>q
więc nagrywanie faktycznie się zatrzymało podczas pisania komendy. Aby użyć makra:@qFINISHYOURCOMMAND<cr>
i gotowe: nie trzeba go edytować. Niestety nie wydaje się, aby działało to w trybie wizualnym (lub gubi wybór) .. lub czy coś przeoczyłem?@q
i zakres został dodany na początku polecenia'<,'>
- dopóki makro zaczęło się od:
...'<,'>
) nadal pasuje do wyboru podczas sprawdzania poprawności polecenia.Jednym ze sposobów na to:
qq
... inne znaki)ESC
aby wyjść z trybu cmdline,q
aby zakończyć makro.ESC
zq
rejestru (*): możesz wkleić go do bufora, usunąć^[
postać, ponownie zaznaczyć całą zawartość (pod względem znaków) i pociągnąć ją z powrotem, aby się zarejestrowaćq
.@q
.Zasadniczo trochę „przetwarzasz” swoje makro, ponieważ jest ono przechowywane w rejestrze :)
(*) Szybkim sposobem na usunięcie ostatniego znaku z makra przechowywanego w rejestrze
q
byłoby:źródło
:let @q = @q[:-2]
? Zwłaszcza jak[:-2]
działa? :-)@q
powyżej). Kilka przykładów tutajPo przeczytaniu komentarza dotyczącego przypadku użycia wygląda na to, że można użyć mapowania klucza zamiast makra.
Mam ten wiersz w moim .vimrc (nie pamiętam, gdzie go znalazłem):
Ma podobny efekt do opisanego przypadku użycia, umieszczając cię w wierszu polecenia, więc jedyne, co musisz zrobić, to wpisać zamianę i nacisnąć Enter, ale w tym przypadku zastępuje wszystkie wystąpienia słowa pod kursorem .
Aby po prostu zastąpić w bieżącym bloku, myślę, że powinno działać coś takiego:
Oczywiście możesz przypisać go do dowolnego klucza, jaki chcesz.
Co robi powyższe: zaznacz bieżącą pozycję za pomocą nienazwanego znacznika, wizualnie wybierz bieżący blok, wyjdź z trybu wizualnego i przywróć kursor do zapisanej pozycji (wizualne znaczniki wyboru są nadal ustawione), wejdź w tryb polecenia i wpisz polecenie zastępcze , wstawiając słowo pod kursorem
<C-r><C-w>
i ustawiając kursor, aby wpisać zamianę.źródło
toBeReplaced
wzorzec nie jest tak prosty jak „słowo pod kursorem”, dlatego potrzebuję małego, konkretnego makra, które mógłbym utworzyć w drodze. I jeszcze raz: zbyt specyficzne dla mapy: \ i tak dziękuję :)toBeReplaced
część (zamiast bieżącego słowa pod kursorem, co jest bardziej ograniczające).va{:s/<C-r>0//g<Left><Left>
Dzięki temu możesz szarpać dowolny wzór, którego potrzebujesz wcześniej, a następnie po prostu naciśnij mapowany klawisz, aby zastąpić ten wzór czymś w bieżącym blok.