Jeśli chcę usunąć każde słowo, jest to łatwe, ponieważ zrobiłbym coś takiego:
:s%/WORD//g
Ale co jeśli chcę zrobić xyz
z każdym wystąpieniem „WORD”? Na przykład, powiedzmy, że chcę usunąć każdą linię, która zawiera „WORD”. Mogę wymyślić kilka sposobów, aby to zrobić, ale żaden z nich nie wydaje się idealny.
1)
/WORD
a następnie naciśnij ręcznie, ddnddnddnddn...
aż nie będzie więcej wystąpień. Ale jest to czasochłonne, jeśli jest wiele linii, aby to zrobić.
2)
qd/WORD<enter>ddq
a następnie zgadnij, ile razy WORD występuje, a następnie, na przykład:
500@d
Ale to albo A) pominie kilka linii lub B) usunie kilka dodatkowych linii.
Czy jest na to lepszy sposób?
500@d
jak opisujesz, jest w rzeczywistości bezpieczny. Odtwarzanie makra zatrzyma się, gdy wyszukiwany termin nie zostanie znaleziony. Więc zobaczysz błąd „Nie znaleziono wzoru: WORD” po usunięciu wszystkich zawierających go wierszy.Odpowiedzi:
Możesz użyć do tego poleceń
:global
i:normal
.:global
Komenda ma następującą składnię:Spowoduje to uruchomienie „polecenia” przy każdym wystąpieniu „wzorca”. Następnie możesz użyć
:normal
polecenia, aby uruchomić serię naciśnięć klawiszy przy każdym wystąpieniu słowa przy użyciu:global
. Tak jak:Jeśli te naciśnięcia klawiszy obejmują specjalne klawisze, takie jak
<Ctrl>
, możesz połączyć je z następującą:execute
komendą:Pamiętaj, że musisz wstawić ukośnik odwrotny przed każdym wystąpieniem specjalnego klucza.
Aby uzyskać więcej informacji na temat tych poleceń, zobacz
:help :normal
i:help :global
.źródło
Dla kompletności możesz użyć
:substitute
, jeśli dopasujesz - w swoim przykładzie (usuń całą linię zawierającą WORD) - całą linię zawierającą WORD, np .:Ma to domyślnie „zamień dopasowanie na nic”, tzn. Jest to krótsza forma:
W połączeniu z
\zs
,\ze
,\(
-\)
(grupowanie) oraz\=
(w części zamiennej) zsubmatch()
,:substitute
mogą być bardzo silne.źródło
Wygląda na to, że szukasz
:global
.źródło
:delete
Wykonywane polecenie jest w rzeczywistości, a nie normalnym trybem działaniad
.:normal
. A jeśli potrzebujesz specjalnych kluczy, możesz nawet potrzebować:exe
-> exe „normal aFooFar \ <esc>”