Если у меня есть следующее:
function foo(bar) {
return bar + 1;
}
И я использую, cw
чтобы изменить первое bar
на baz
, как я могу перейти к следующему соответствию bar
, чтобы я мог использовать, .
чтобы сделать то же самое изменение?
Я не могу использовать *
, потому что это ищет текущее слово под курсором, и я глупо не искать bar
в первый раз, поэтому n
не будет работать.
Есть ли простой способ поиска следующего вхождения слова, которое было до того, как я его изменил?
Я не хочу выполнять поиск и замену, потому что или bar
в моем файле есть другие вхождения, которые я не хочу менять, или потому что было только два экземпляра bar
, и я забыл, :%s/bar/baz/
прежде чем начал, и это слишком много усилий, чтобы изменить единственный оставшийся экземпляр.
*
поиск. Особенно это заставляет*
визуально выбирать текущее слово без перемещения курсора. После того, как оно установлено, вы можете*ciw
внести старое слово в регистр поиска и изменить его. Тогда вы можете использоватьn
и.
.n
не сработает.Ответы:
Текст, который вы только что изменили,
cw
был вырезан в безымянный регистр, поэтому вы можете использовать его с:чтобы перейти к следующему вхождению текста, охватываемого вашим последним изменением.
источник
Чтобы расширить Romainl как полный рабочий процесс ...
Если вам больше нравится выполнять редактирование такого рода, а затем понимаете, что вам необходимо применить те же правки к абзацу / функции, которые вы можете использовать
"
и в.
регистрах.В вашем примере вы можете выполнить первоначальное редактирование аргумента. Если вы войдете в визуальный режим (я бы использовал Visual Line просто для того, чтобы убедиться, что вы все правильно выбрали), а затем применили поиск и замену.
V]] - Визуальная строка, до конца абзаца / функции.
:'<,'>
Этот шаблон требует некоторого времени, чтобы привыкнуть, так как вы должны использовать. Большую часть времени вам нужно просто применить поиск и замену ко всей функции, включая аргумент, но это хороший способ не выполнять анти-шаблон: «Работай, понимай, что ты должен был сделать это лучше, отменить и повторить». правильно."
источник
Если вы не против нажать комбинацию, отличную от
cw
, то, я думаю, вы можете легко получить то, что хотите, определив ярлык. Что вы можете сделать, это разместить следующеев вашем
.vimrc
файле. Обратите внимание, что^M
это захват ключа возврата, а не символы^
иM
. Вы получите это, нажав Ctrl+ Vв режиме вставки, а затем Enter. Теперь, с этим определением, нажатие<leader>a
будет выполнять то же самоеcw
, но теперь слово (до изменения) будет в вашем «последнем регистре поиска» (то есть в/
регистре), поэтому нажатие nпосле того, как вы внесли изменение и вернули в нормальном режиме приведет вас к следующему появлению. Аналогично, нажатие Nвернет вас к предыдущему событию.Ярлык Конечно, вы можете выбрать другой ярлык, чем другой
<leader>a
, но я просто нахожу, что это очень доступный ярлык. Лично я поставил ,<leader>
чтобы,
так , что мне просто нужно нажимать ,следует a, но это потому , что я не использую американскую клавиатуру, так что мой \спрятано несколько (я считаю , \по умолчанию<leader>
).Пояснение Идея действительно проста. Наберите слово под курсором в регистр поиска
/
и затем выполнитеcw
. Этоnmap <leader>a "/yciw
было то, к чему я стремился, но, к сожалению, я не думаю, что вы можете восстановить регистр поиска, поэтому обходной путь состоит в том, чтобы вернуть слово под курсором в1
регистр, затем установить/
регистр равным этому и затем сделатьcw
. Так"1yiw
же и та часть, которая возвращает внутреннее слово под курсором в регистр1
. Если вы не знаете о внутренних словах, вы можете проверить:help iw
. После этого:let @/=@1
следует захват Enterсодержимого1
регистра в/
. На данный момент nиNработает как следующее и предыдущее вхождение слова под курсором, а затемciw
делается так, что слово под курсором удаляется и Vim переводится в режим вставки.Слово против внутреннего слова Я только что понял, что я предполагал, что вы хотите, чтобы все слово находилось под курсором, а не только с точки зрения курсора и так далее. Вот почему я использовал
iw
вместоw
везде. Если это не так, то вы должны использоватьвместо. Если курсор находится на первой букве слова, разницы нет.
отказ от ответственности Это решение, вероятно , не очень хорошо работает , если вы пытаетесь использовать его на то , что содержит вещи , отличные от букв, например, имея курсор стоять на
\
или путем заменыiw
наiW
,ib
,is
илиip
или что - то (хотя я не знаю , почему вы бы хочу эту функцию с целыми предложениями)источник