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, cw
to polecenie zmiany słowa , n
przechodzi 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ń
cgn
to „zmień wszystko, co jest wynikiem (znajdź następne wystąpienie)”. Teraz, gdy jest to ostatnie polecenie , nie potrzebujesz, n
aby przejść do następnego wystąpienia, więc ponownie mniej pociągnięć i, co ważniejsze, nie ma potrzeby zmiany n
i .
. 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 gn
do zaznaczania słów jest bardzo szybkie - wystarczy jedno naciśnięcie klawisza (cóż, powiedzmy 1,5)
- używając
*
lub gn
upewnia się, że nie dostaniesz żadnych dopasowań w innych słowach, tak samo jak :%s/<C-R>//gc
. Pokonuje :%s/\<OLDNAME\>/NEWNAME/gc
rę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ęć,
n
aby 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.