Chciałbym uruchomić makro w każdej linii w zaznaczeniu, zamiast sumować liczbę wierszy w mojej głowie. Na przykład mógłbym napisać makro do przekształcenia:
Last, First
W
First Last
i chciałbym, żeby działał na wszystkich tych liniach:
Stewart, John
Pumpkin, Freddy
Mai, Stefan
...
Jakieś pomysły guru Vima?
EDYCJA: To tylko przykład, oczywiście jest to trywialnie regexable, ale pojawiają się inne wystąpienia, które nie są tak łatwe, że wolałbym używać makr.
Odpowiedzi:
Załóżmy, że masz makro,
q
które działało (i pozostało) w jednym wierszu. Następnie możesz uruchomić go w każdej wybranej linii za pomocą:(jeśli masz już wybraną grupę linii, naciskając
:
produkuje:'<,'>
w wierszu poleceń)Na przykład w poniższym makrze wszystkie słowa oprócz pierwszego w wierszu są pisane wielką literą:
Więc uruchamiam go na następującym (gdzie
+
zaznaczone są linie)Za pomocą powyższego
normal @q
polecenia daje:źródło
:let @q="^wgU$"
:'<,'>normal! @q
@q
. From:help normal
- "Jeśli podano [!], Mapowania nie będą używane."@
w trybie wizualnym jak ten:vnoremap @ :normal @
. W ten sposób nadal możesz robić@a
to, czego się spodziewałeś (chociaż musisz później wcisnąć enter :()Wybierz linie, a następnie naciśnij,
:
aby przejść do trybu poleceń. Vim automatycznie wypełni'<,'>
, co ogranicza zakres do wybranych linii. Na przykład możesz użyć:s
polecenia, aby wykonać zamianę:Spowoduje to zamianę dwóch słów oddzielonych przecinkiem w każdym wierszu zaznaczenia wizualnego.
Możesz także użyć
'<
i'>
jak każdej innej zakładki lub pozycji linii, np. Jako części polecenia ruchu, więc w trybie normalnymd'<
usunie od aktualnej pozycji kursora do początku pierwszej linii w wizualnym zaznaczeniu. Znaki pozostają aktywne, nawet jeśli blok nie jest już wizualnie podświetlony.Jeśli chcesz odtworzyć nagrane makro w każdym wierszu, musisz wykonać makro za pomocą
:normal
polecenia. Niestety:normal
polecenie nie działa na szeregu linii, ale możesz to naprawić za pomocą:global
polecenia. To uruchamia:ex
polecenie w każdym wierszu, który pasuje do wyrażenia regularnego, więc możesz to zrobić:Wyjaśnienie:
źródło
^
z nim,.
aby makro działało tylko w wierszach zawierających jakiś tekst, prawda?Możesz dodać poniższą funkcję do swojej
~/.vimrc
lub po prostu skopiować ją do przeglądarki i uruchomić:@+
Zaletą jest to, że możesz zastosować dowolne makro na selekcji wizualnej. Musisz podać literę makra jako argument, na przykład:
źródło