Wiem, że to stare pytanie, a droga @ mykola-golubyev JEST oczywiście najlepszą odpowiedzią dla konkretnego przypadku w pytaniu OP (które, jak zakładam, przechodzi przez zaciemniony kod, w którym prawdopodobnie będziesz mieć wiele bloków o tych samych nazwach var) ; ale przy takiej nazwie pytania wiele osób przychodzących tutaj z wyszukiwań w Google prawdopodobnie szuka mniej specyficznych dla sytuacji sposobów zmiany nazw zmiennych w VIM - a te mogą być bardziej zwięzłe
Jestem zaskoczony, że nikt nie zasugerował w ten sposób:
* :s// NOWE IMIE /gc
To *jest to samo co gn- wyszukuje następne wystąpienie słowa pod kursorem ORAZ staje się ostatnim szukanym wzorcem, więc kiedy pominiesz wzorzec wyszukiwania w poleceniu substytucji, VIM zakłada, że jest to wzorzec do wyszukania.
W przypadku małych ilości kopii var, jeszcze szybsza:
* cw NEWNAME, <esc> a następnie powtórz n.dla innych wystąpień
Szukaj wystąpienia, cwto polecenie zmiany słowa , nprzechodzi do następnego wystąpienia ostatnio wyszukiwanego terminu i .powtarza ostatnie polecenie (czyli zmień słowo na NOWA NAZWA )
(Podziękowania dla mnie, wiedząc o tym wszystkim, trafiają do @doomedbunnies na Reddit )
Kolejna fajna sztuczka to: ( Podziękowania dla @ nobe4 )
* cgn NEWNAME, <esc> a następnie powtórz .dla innych wystąpień
cgnto „zmień wszystko, co jest wynikiem (znajdź następne wystąpienie)”. Teraz, gdy jest to ostatnie polecenie , nie potrzebujesz, naby przejść do następnego wystąpienia, więc ponownie mniej pociągnięć i, co ważniejsze, nie ma potrzeby zmiany ni .. Ale oczywiście ma tę wadę, że nie ma sposobu, aby pominąć wystąpienie.
Oto kilka korzyści:
- bez mapowania, bez .vimrc (lub init.vim), więc możesz go użyć w dowolnej napotkanej kopii VIM (np. szybkie zadanie na jakimś VPS lub komputerze twojego przyjaciela, gdzie skonfigurowanie VIM na swój sposób zniweczy cel `` szybkiego '' )
- używanie
*lub gndo zaznaczania słów jest bardzo szybkie - wystarczy jedno naciśnięcie klawisza (cóż, powiedzmy 1,5)
- używając
*lub gnupewnia się, że nie dostaniesz żadnych dopasowań w innych słowach, tak samo jak :%s/<C-R>//gc. Pokonuje :%s/\<OLDNAME\>/NEWNAME/gcręczne wpisywanie : osobiście często zapominam \<o ograniczaniu dopasowań tylko do całych słów.
- Nieużywanie zakresu spowoduje tylko kilka dodatkowych pociągnięć,
naby pominąć niechciane dopasowania - prawdopodobnie nawet mniej niż dodatkowe pociągnięcia potrzebne do ograniczenia zakresu. W normalnych okolicznościach Twoje zmienne są najprawdopodobniej nieco zlokalizowane w określonym bloku kodu.