Zapisz ostatnią akcję (.) W makrze

9

Przypadek użycia

Jestem w trybie normalnym. Nie myślałem wprost o nagraniu makra, ale dokonuję zmiany jednego polecenia. Teraz mogę powtórzyć tę akcję, używając kropki.

Teraz zdaję sobie sprawę, że warto zapisać w makrze, aby użyć później, zamiast wpisywać całe polecenie za każdym razem. Mogę albo zająć się wszystkimi zmianami, które wymagają teraz tego polecenia, używając kropki, lub mogę kontynuować edycję i użyć tego polecenia, zapisując je w makrze.

To drugie chcę zrobić, ale najprostszy sposób, w jaki mogę to zrobić, nie jest łatwy - cofnij moją zmianę, zacznij nagrywać makro i ponownie wpisz polecenie, aby wprowadzić wymaganą zmianę i przestań rejestrować makro.

Co próbowałem do tej pory:

Zapis kropki w makrze nie działa, ponieważ rejestruje kropkę, a nie zmianę, którą wykonuje kropka. (Na przykład załóżmy, że polecenie zapisane w kropce brzmiało: d5wjeśli zaczniesz rejestrować makro i wykonasz akcję za pośrednictwem. Oczekując, że usunie 5 słów przy każdym uruchomieniu makra, to się nie stanie. Przy następnym uruchomieniu makro zrobi kropkę, a nie polecenie d5w. Oznacza to, że jeśli dokonałeś innej zmiany po zarejestrowaniu makra - powiedz, usuń 3 słowa za pomocą d3wi była to ostatnia dokonana zmiana, a kiedy uruchomisz makro, usunie 3 słowa, a nie 5, bo to po prostu działa .)

Peeyush Kushwaha
źródło
Staram się zrozumieć zarówno to, co chcesz robić, jak i dlaczego nie robisz tego za pomocą makra.
1
@DrEval OP po wykonaniu polecenia w trybie normalnym zdaje sobie sprawę , że powinien zapisać go w makrze i nie chce go wpisywać ponownie podczas rejestrowania makra.
Bogaty

Odpowiedzi:

2

Vim nie przechowuje historii poleceń w trybie normalnym. Jeśli chcesz zachować historię swojej historii trybu normalnego, możesz skorzystać z następujących opcji, aby zapisać ją w pliku: https://vi.stackexchange.com/a/587/13848

Polecenia w trybie normalnym są zwykle krótkie, więc ludzie po prostu wpisują je w trybie normalnym i nie próbują tworzyć makr. Jeśli jednak chcesz tworzyć makra z poleceń trybu normalnego, możesz przekonwertować je na Expolecenie trybu, a następnie zapisać je w makrze, jak wskazał @wmmso. Możesz to zrobić za pomocą normpolecenia. Więc jeśli chcesz usunąć 2 słowa, zaczynając od bieżącej pozycji kursora, i użyj polecenia trybu normalnego w Extrybie użycia :norm d2w. (Patrz: http://vimdoc.sourceforge.net/htmldoc/various.html#:norm , Wykonaj normalne polecenie poza zakresem )

Lepiej jest użyć Expolecenia trybu, jeśli jest to polecenie skomplikowane, ponieważ pozwala na wpisanie pełnego polecenia w buforze, upewnienie się, że jest rzeczywiście poprawne, a także zapisanie go w historii wiersza poleceń.

Teraz, gdy masz polecenie trybu normalnego w trybie ex, możesz także przeglądać swoje polecenia, używając historii q:, a następnie skopiować je do rejestru za pomocą "ay$, podczas gdy w wierszu zawierającym wiersz poleceń, który chcesz zapisać w makrze. Następnie, gdy chcesz uruchomić makro, możesz je wykonać za pomocą@a

alpha_989
źródło
Jak jednak napisałbyś polecenie w trybie normalnym w wierszu poleceń? na przykład d2w?
Peeyush Kushwaha,
Dodano kilka wyjaśnień w odpowiedzi. Czy to pomaga?
alpha_989
0

skopiuj zawartość rejestru „:” (co właśnie zrobiłeś) do innego rejestru, np. zarejestruj:

:let @a = @:

możesz wykonać go ponownie za pomocą

@a
wmmso
źródło
To nie działa dla mnie w vim 7.4. Wydaje się, że rejestr :zawiera ostatnio wykonane polecenie :command-name-goes-herezamiast zamiast polecenia trybu normalnego, takiego jakd2w
Peeyush Kushwaha
2
To rozwiązanie działa tylko w przypadku poleceń ex, a nie poleceń w trybie normalnym. Nie znam rejestru, który przechowuje ostatnie polecenie trybu normalnego. Przydałby się
Steve