Jak selektywnie zmienić podświetlony ciąg?

11

Podczas wyszukiwania wyróżniłem ciąg, który chcę zmienić. Teraz chcę zastąpić tylko podświetlony tekst. Używam ndo przejścia do następnej instancji ciągu wyszukiwania. Myślałem, że mogę coś zrobić, ciwale to zmienia całe słowo, a nie tylko podświetlony tekst.

Znam się na tym, :%s/old/new/gale nie chcę zmieniać wszystkich instancji. Zamiast tego chcę przesunąć kursor do każdej instancji, a następnie zdecydować, czy ją zmienić.

zundarz
źródło

Odpowiedzi:

16

Użyj gnruchu, aby edytować bieżące dopasowanie wyszukiwania. Poniższy przykład zmieni bieżące dopasowanie na „FooBar”:

cgnFooBar

Wspaniałą częścią tej techniki jest to, że możesz powtórzyć zmianę za pomocą .. Zakładając, że następny mecz zostanie zmieniony w taki sam sposób, jak po prostu .powtórzyć. Lub pomiń kilka dopasowań za pomocą, na następnie użyj ..

Vimcasts ma fajny odcinek na ten temat: Operowanie wyszukiwaniem meczów za pomocą gn

Aby uzyskać więcej pomocy, zobacz:

:h gn
Peter Rincker
źródło
Jest to zdecydowanie droga, gdy masz różne ciągi zastępcze, których musisz użyć w różnych miejscach. Nie jestem pewien co do niuansów trybu wizualnego, które wydają się przywoływane gn, więc oto podobna metoda, którą właśnie odkryłem:c//e<CR>FooBar<Esc>//<CR>
Jeff
Czy istnieje sposób na zmianę wszystkich selekcji / dopasowań jednocześnie? Zasadniczo do refaktoryzacji?
Geremia
@Geremia, tak, :%s/oldtext/newstuff/gzmieni wszystkie dopasowania oldtextna newstuff.
zundarz
@zundarz Nie chcę robić wyrażenia regularnego, ale tylko zastępować nazwy zmiennych. Zamiast uderzać .wiele razy, mogę użyć :%norm .( źródło ).
Geremia
7

Jeśli szukałeś już słowa za pomocą /wordlub ?word.

Możesz użyć :%s//newword/gcdo zastąpienia słowa, którego wcześniej szukałeś newword, pozostawiając wyszukiwane hasło ( s//..) puste.

cFlaga mówi, że każda zmiana powinna być potwierdzona poprzez naciśnięcie yna Tak lub nna nie.

Spójrz na :help :s_flagswięcej informacji na temat flagi potwierdzenia.

Raphael Ahrens
źródło
1
Wiem, że mówi się, spojrzeć na pomoc, ale równie dobrze można wyraźnie wspomnieć można także nacisnąć l, ai q(lub <Esc>) na różne sposoby, aby zakończyć cykl potwierdzenia.
Jeff
2

Metoda nr 1

Możesz skorzystać z mapowania gni gNzrealizować to, co chcesz. gnwyszuka do przodu ostatnio używane wyszukiwane hasło i wizualnie wybierze dopasowanie. gNrobi dokładnie to samo, z wyjątkiem tego, że przeszukuje wstecz. W połączeniu z operatorem, takim jak np. c, Operator zostanie zastosowany do dopasowania, na przykład jeśli twój ostatni ciąg wyszukiwania to „foo” i wpiszesz cgn, będzie szukał następnego wystąpienia „foo”, usunie go i przejdzie w tryb wstawiania, aby wprowadzić tekst zastępczy.

Aby uzyskać więcej informacji na ten temat, zobacz :help gni :help gN.

Metoda nr 2

Możesz użyć :substitutepolecenia z cflagą. Zostaniesz poproszony o potwierdzenie każdej zamiany. Powiedzmy na przykład, że chciałeś zastąpić foo paskiem w całym pliku, ale chciałeś potwierdzić każdą zamianę:

:%s/foo/bar/gc

Więcej na ten temat można znaleźć w następujących tematach pomocy: :help :s_flags, :help cmdline-ranges, i :help :substitute.

Wiecznie zielone drzewo
źródło