vim: użyj ciągu z wyszukiwania w poleceniu replace

16

Często używam /polecenia vim search, aby zweryfikować moje wyrażenia regularne (tylko po to, żeby zobaczyć, co pasuje). Potem zwykle używam :%skomendy replace, gdzie używam tego wyrażenia regularnego z wyszukiwania jako ciągu do zamiany, np. Najpierw szukam takiego ciągu:

/TP-\(\d\{5\}\)-DD-\d\{3\}

Dokładnie pasuje do tego, czego chcę, więc wykonuję swoje zamiany:

:%s/TP-\(\d\{5\}\)-DD-\d\{3\}/\1/g

Ale muszę tu jeszcze raz napisać całe wyrażenie regularne. Zwykle wyrażenie regularne jest znacznie dłuższe, dlatego szukam rozwiązania:

Czy istnieje jakiś skrót lub skrypt vim do wklejania tego wzorca wyszukiwania bezpośrednio do polecenia replace?

Używam vima w terminalu (bez gvim).

kars7e
źródło

Odpowiedzi:

20

Ogólnie rzecz biorąc, puste wyrażenie regularne oznacza użycie wcześniej wprowadzonego wyrażenia regularnego, więc :%s//\1/gnależy zrobić, co chcesz.

geekozaur
źródło
Łał, to takie proste! Właśnie tego potrzebowałem, dzięki.
kars7e
10
Ponadto, jeśli chcesz zweryfikować lub zmodyfikować ostatnio używany wzorzec, możesz użyć Control-r, a następnie /wstawić zawartość rejestru wzorca wyszukiwania ( /) bezpośrednio do częściowo wpisanego wiersza poleceń (np. Zaraz po :%s/).
Chris Johnsen
to również bardzo przydatna wskazówka. Dzięki @Chris! +1
kars7e 13.03.11
Co jeśli chcę sprawdzić „\ 1” z liczbą taką jak powiedzmy 23? Jak uniknąć interpretowania go jako „\ 123”?
Champ
@Champ Ponieważ referencje tylko się \9wznoszą, nie ma dwuznaczności.
Kusalananda
4

Innym dobrym sposobem na obejrzenie wcześniejszych wyszukiwań wyrażeń regularnych oraz poleceń Ex i dokonanie w nich zmian jest edycja tych poleceń w trybie normalnym. Z tego trybu będziesz mieć wszystkie swoje zdolności vima, w tym kopiuj i wklej.

  • Wyszukiwanie: zamiast ?lub /do wyszukiwania, spróbuj q/lubq?
  • Ex poleceń, zamiast :spróbowaćq:
  • aby wyjść z tego trybu użyj CtrlC

Aby przeczytać więcej, zobacz :help q:.

Ryan Carney
źródło