Jeśli mam następujące elementy:
function foo(bar) {
return bar + 1;
}
I używam, cw
aby zmienić pierwszy bar
na baz
, jak przejść do następnego dopasowania bar
, aby móc użyć .
tej samej zmiany?
Nie mogę użyć *
, ponieważ wyszukuje bieżące słowo pod kursorem, a głupio nie szukałem bar
po raz pierwszy, więc n
nie będzie działać.
Czy istnieje prosty sposób wyszukiwania następnego wystąpienia tego słowa, tak jak było przed jego zmianą?
I nie chcą zrobić wyszukiwania i zamiany, bo albo są inne występujące bar
w moim pliku, że nie chcesz zmienić, albo dlatego, że były tylko dwa przypadki bar
, a ja zapomniałem o :%s/bar/baz/
zanim zacząłem i że zbyt wiele wysiłku, aby zmienić jedyną pozostałą instancję.
*
wyszukiwanie. Zwłaszcza sprawia, że*
wizualnie wybiera bieżące słowo bez poruszania kursorem. Po zainstalowaniu możesz zrobić,*ciw
aby umieścić stare słowo w rejestrze wyszukiwania i zmienić słowo. Następnie możesz użyćn
i.
.n
nie będzie działać.Odpowiedzi:
Tekst, który właśnie zmieniłeś,
cw
został wycięty w rejestrze bez nazwy, dzięki czemu możesz go ponownie użyć za pomocą:aby przejść do następnego wystąpienia tekstu objętego ostatnią zmianą.
źródło
Aby rozszerzyć romainl jako kompletny przepływ pracy ...
Jeśli wolisz wykonać tego rodzaju edycję, a potem zdajesz sobie sprawę, że musisz zastosować te same zmiany w akapicie / funkcji, której możesz użyć w rejestrach
"
i.
.W twoim przykładzie możesz wykonać początkową edycję argumentu. Jeśli przejdziesz do trybu wizualnego (użyję Visual Line tylko po to, aby upewnić się, że wszystko wybierzesz poprawnie), a następnie zastosuję wyszukiwanie i zamianę.
V]] - Linia wizualna do końca akapitu / funkcji.
:'<,'>
Przyzwyczajenie się do tego wzorca zajmuje trochę czasu, ponieważ musisz go użyć. Przez większość czasu chcesz po prostu zastosować wyszukiwanie i zastąpić całą funkcję łącznie z argumentem, ale jest to dobry sposób, aby nie wykonywać anty-wzorca „Wykonaj pracę, zdaj sobie sprawę, że powinieneś to zrobić lepiej, cofnij i powtórz poprawnie."
źródło
Jeśli nie masz nic przeciwko naciśnięciu innej kombinacji niż
cw
, wtedy uważam, że możesz łatwo uzyskać to, czego chcesz, definiując skrót. Co możesz zrobić, to umieścić następującew twoim
.vimrc
pliku. Zauważ, że^M
jest to przechwycenie klucza powrotu, a nie znaków^
iM
. Możesz to zrobić, naciskając Ctrl+ Vw trybie wstawiania, a następnie Enter. Teraz, po zdefiniowaniu tego, naciśnięcie<leader>a
będzie działało tak samo, jakcw
teraz, ale teraz słowo (przed zmianą) będzie w twoim „rejestrze ostatniego wyszukiwania” (to znaczy/
rejestrze), więc naciśnij npo dokonaniu zmiany i zwróceniu do trybu normalnego przeniesie Cię do następnego wystąpienia. Podobnie naciśnięcie Nspowoduje przejście do poprzedniego wystąpienia.Skrót Możesz oczywiście wybrać inny skrót niż
<leader>a
, ale uważam, że jest to bardzo dostępny skrót. Osobiście mam ustawione<leader>
na,
tak, że wystarczy nacisnąć ,a następnie a, ale to dlatego, że nie używam amerykańską klawiaturę, tak, że mój \jest ukryty nieco (wierzę \jest domyślnym<leader>
).Wyjaśnienie Pomysł jest naprawdę prosty. Podciągnij słowo pod kursorem do rejestru wyszukiwania,
/
a następnie wykonajcw
. Taknmap <leader>a "/yciw
właśnie dążyłem, ale niestety nie sądzę, że można szarpać do rejestru wyszukiwania, więc obejście polega na szarpnięciu słowa pod kursorem do1
rejestru, a następnie ustawieniu/
rejestru tak, a następniecw
. Podobnie"1yiw
część, która podciąga wewnętrzne słowo pod kursorem do rejestru1
. Jeśli nie wiesz o wewnętrznych słowach, możesz to sprawdzić:help iw
. Następnie:let @/=@1
przechwytywanie Enterumieszcza zawartość1
rejestru w/
. W tym momencie niNdziała jako następne i poprzednie wystąpienie słowa pod kursorem, a następnieciw
jest wykonywane tak, że słowo pod kursorem jest usuwane, a Vim przechodzi w tryb wstawiania.słowo kontra słowo wewnętrzne Właśnie zdałem sobie sprawę, że założyłem, że chcesz całe słowo pod curser, a nie tylko od curser i dalej. Dlatego użyłem
iw
zamiastw
wszędzie. Jeśli tak nie jest, powinieneś użyćzamiast. Jeśli kursor znajduje się na pierwszej literze słowa, nie ma różnicy.
disclaimer Rozwiązanie to prawdopodobnie nie będzie działać dobrze, jeśli starają się używać go na coś, co zawiera rzeczy różni się od liter, na przykład poprzez podstawkę kursora na
\
lub przez zastąpienieiw
przeziW
,ib
,is
lubip
czy coś (choć nie wiem dlaczego byś chcesz tę funkcję z całymi zdaniami)źródło