Czy są jakieś polecenia w Vim / Vi do poruszania się w wybranym segmencie wyszukiwania?
Na przykład, jeśli szukam słowa, czy są jakieś polecenia, aby przesunąć kursor na koniec podświetlonego segmentu? Powiedz, że mam słowo „FishTaco” i chcę wyszukać wszystkie wystąpienia wyrażenia „Fish” i wstawić coś po nim. Wiem, że mógłbym dokonać globalnej zamiany, ale co jeśli chcę wprowadzić zmianę tylko w kilku niesekwencyjnych wystąpieniach?
Mogłem zobaczyć, gdzie byłoby wygodnie móc przesunąć kursor na koniec aktualnie podświetlonego segmentu, aby wykonać akcję.
Fish
zFishTaco
, można zrobić:%s/Fish\(Taco\)\@!/&Taco/
, co znajdzie każdyFish
nie następuje jużTaco
i zastąpić jąFishTaco
. Łączy wyszukiwanie z wykluczającym wyprzedzeniem ze zmianą obejmującą dopasowany termin, po którym następujeTaco
.Odpowiedzi:
Możesz to zrobić w ten sposób:
/Fish/e
Na
/e
końcu umieszcza kursor na końcu obszaru wyszukiwania (zamiast domyślnie pierwszego znaku.źródło
/Fish
wyszukiwania możesz przeskoczyć do końca za pomocą//e
iz Vima 7.4, którego możesz użyćgn
do wizualnego podświetlenia znalezionego wyniku.Jeśli chcesz po prostu umieścić kursor po ostatnim znaku Fish, możesz użyć
co spowoduje umieszczenie kursora po h. (Bez
+1
kursora znajdzie się po lewej stronie ostatniego znaku).Jeśli jesteś szczególnie zainteresowany umieszczeniem kursora po Fish, ale tylko wtedy, gdy pojawia się w „FishTaco”, możesz wypróbować jedną z następujących opcji:
Możesz użyć
a kursor znajdzie się między Fish i Taco.
/s+4
Umieszcza kursor 4 miejsc po rozpoczęciu szukanej.Możesz również użyć
co spowoduje umieszczenie kursora w 3 miejscach na lewo od lewej strony ostatniego (końcowego) znaku.
Możesz także użyć
ponieważ
/b+4
będzie traktowane jako/s+4
.źródło
Jeśli już szukałeś
/Fish
, możesz szybko zmienić wyszukiwanie, aby przejść do końca dopasowania przez//e
, które powtarza ostatnie wyszukiwanie, ale dodajee
modyfikator, który został już wyjaśniony.źródło
/ long-regexp1 \zs long-regexp2 /
.. kursor zatrzyma się na \ zs , zobacz: help \ zsźródło
Gdy masz już wizualną selekcję, możesz użyć,
o
aby przełączyć pozycję kursora między początkiem i końcem wybranego bloku. Kiedy zaznaczenie przebiega według linii, powoduje to przełączenie pozycji wiersza , co oznacza, że kursor przesuwa się do początkowej i końcowej linii zaznaczenia, ale nie do znaku początkowego lub końcowego. Gdy wybór dotyczy znaków, ruch jest również zgodny z charakterem.Możesz także użyć
`<
i,`>
aby przełączać kursor między początkiem i końcem bloku wizualnego, jednak ma to wpływ na sam wybór, więc służy do resetowania lub dostosowywania granic zaznaczenia.Edycja: Ach, ale w przypadku podświetlenia wyszukiwania to nie zadziała, ponieważ
o
zainicjuje wstawianie wiersza. Myślę, że podświetlenie wyszukiwania to nie to samo, co selekcja wizualna, przepraszam :)źródło
Część pytania „kursor na końcu dopasowania” została już udzielona.
Możesz to zrobić
:%s/Fish/FishTaco/c
. Daje to możliwość potwierdzenia lub odrzucenia każdej zamiany i pominięcia całego zadania „kursor na końcu dopasowania”.źródło
y
lubn
tak dalej, aż nie ma już żadnych dopasowań. Aby zaakceptować wszystkie dalsze podstawienia, wpisza
, aby je odrzucić, wpiszq
.g
za finałem,/
więc nie było to kontynuowane w mojej linii. Dzięki za wskazówkę.