Я знаю, что это старый вопрос, и путь @ mykola-golubyev, очевидно, является лучшим ответом для конкретного случая в OP-вопросе (который, я полагаю, проходит через запутанный код, в котором вы, вероятно, будете иметь несколько блоки с одинаковыми именами var); но с таким названием вопроса многие люди, приходящие сюда из поисков Google, вероятно, ищут менее специфичные для конкретной ситуации способы переименования переменных в VIM - и они могут быть более краткими
Я удивлен, что никто не предложил такой способ:
*
:s//
NEWNAME /gc
*
совпадает с gn
- он ищет следующее вхождение слова под курсором И становится последним найденным шаблоном, поэтому, когда вы пропускаете шаблон поиска в команде замены, VIM предполагает, что это шаблон для поиска.
Для небольшого количества var-копий, еще более быстрого:
*
cw
NEWNAME <esc>
, затем повторите n.
для других случаев
Поиск вхождений, cw
- команда для изменение слова , n
- переход к следующему вхождению для последнего поиска и .
повторение последней команды (то есть изменение слова на NEWNAME )
(Кредиты для меня, зная все это, перейдите на @ doomedbunnies на Reddit )
Еще один крутой трюк: ( кредиты @ nobe4 )
*
cgn
NEWNAME <esc>
, затем повторите .
для других случаев
cgn
- это «изменить то, что является результатом (найти следующее вхождение)». Теперь, когда это последняя команда, вам не нужно n
, чтобы перейти к следующему вхождению, поэтому снова нужно меньше ударов и, что более важно, не нужно чередовать n
и .
. Но, очевидно, у этого есть недостаток, заключающийся в отсутствии способа пропустить событие.
Вот некоторые преимущества:
- нет сопоставления, нет .vimrc (или init.vim), так что вы можете использовать его в любой копии VIM, с которой вы сталкиваетесь (например, быстрое задание на каком-нибудь VPS или компьютере вашего друга, где настройка VIM на вашем пути не позволит 'быстрый')
- Использование
*
или gn
для выбора слов очень быстро - всего одно нажатие клавиши (ну, скажем, 1,5)
- с использованием
*
или gn
гарантирует, что вы не получите совпадений внутри других слов, как :%s/<C-R>//gc
. Ударяет ввод :%s/\<OLDNAME\>/NEWNAME/gc
от руки: лично я склонен забывать использовать вещи \<
, чтобы ограничить совпадения только целыми словами.
- Не использование области действия приведет только к нескольким дополнительным штрихам
n
, чтобы пропустить нежелательные совпадения - возможно, даже меньше, чем дополнительные штрихи, необходимые для ограничения области. При нормальных обстоятельствах ваши переменные, скорее всего, в какой-то степени все-таки локализуются в определенном блоке кода.