Перейти до наступного появи слова, яке я щойно змінив


12

Якщо у мене є таке:

function foo(bar) {
    return bar + 1;
}

І я використовую, cwщоб змінити перший barна baz, як я перейти до наступного відповідності bar, щоб я міг використати .ті ж зміни?

Я не можу використовувати *, тому що шукає поточне слово під курсором, і я нерозумно шукав barперший раз, тому nне вийде.

Чи є простий спосіб пошуку наступного виникнення слова таким, яким воно було до того, як я його змінив?

Я не хочу займатися пошуком і заміною, тому що або barв моєму файлі є інші випадки, які я не хочу змінювати, або тому, що було лише два екземпляри bar, і я забув про те, :%s/bar/baz/перш ніж почати, і це теж багато зусиль, щоб змінити єдиний екземпляр, що залишився


2
Це не повністю відповідає описаному вами робочому процесу, але vim-koque покращує *пошук. Особливо це змушує *візуально вибрати поточне слово, не переміщуючи курсор. Після її встановлення ви можете зробити *ciwстаре слово в реєстрі пошуку та змінити слово. Тоді можна використовувати nі ..
statox

Натискання n переведе вас до наступного появи останнього шуканого шаблону. Чому ви цього не спробували?
SibiCoder

... тому що я не шукав, щоб дістатися до першої події, тому nне буде працювати.
Роджер Ліпскомб

Відповіді:


14

Текст, який ви тільки що змінили, cwбув вирізаний у реєстрі без назви, щоб ви могли повторно використовувати його:

/<C-r>"<CR>

щоб перейти до наступного появи тексту, охопленого вашою останньою зміною.


5

Щоб розширити роботу Romainl як повний робочий процес ...

Якщо ви більше займаєтесь подібним редагуванням, а потім зрозумієте, що вам потрібно застосувати ті самі зміни над абзацом / функцією, яку ви можете використовувати "та .регістри.

У вашому прикладі ви можете виконати початкове редагування аргументу. Якщо ви перейдете у візуальний режим (я б використовував Visual Line просто для того, щоб переконатися, що ви вибрали все правильно), а потім застосував пошук та заміну.

V]] - Візуальна лінія, до кінця абзацу / функції.

  • : - Оскільки ви перебуваєте у візуальному режимі, це стає :'<,'>
  • s/ - Знайдіть
  • CTRL+ "- елемент останнього вимикання / видалення (смужка в прикладі)
  • / - і замінити
  • CTRL+ .- остання вставка (баз у прикладі)

Ця модель вимагає трохи часу, щоб звикнути, оскільки вам доведеться використовувати. Більшу частину часу ви хочете просто застосувати знахідку та заміну до всієї функції, включаючи аргумент, але це приємний спосіб не виконувати анти-шаблон "Робіть роботу, зрозумійте, що ви повинні зробити це краще, скасувати та повторити правильно ".


2

Якщо ви не проти натиснути іншу комбінацію, ніж cwтоді, я вважаю, що ви можете отримати те, що хочете, легко, визначивши ярлик. Що ви можете зробити, це розмістити наступне

nmap <leader>a "1yiw:let @/=@1^Mciw

у вашому .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працює як наступне, так і попереднє виникнення слова під курсором, а потім a ciwробиться так, що слово під курсором видаляється, а Vim переходить у режим вставлення.

слово проти внутрішнього слова, я щойно зрозумів, що я припускаю, що ви хочете, щоб все слово було під курсором, а не лише з точки зору курсору і далі. Ось чому я використовував iwзамість wскрізь. Якщо це не так, то слід скористатися

nmap <leader>a "1yw:let @/=@1^Mcw

замість цього. Якщо курсор знаходиться на першій букві слова, різниці немає.

відмова від відповідальності Це рішення, ймовірно , НЕ дуже добре працює , якщо ви намагаєтеся використовувати його на те , що містить речі , відмінні від букв, наприклад, маючи курсор стояти на \або шляхом заміни iwна iW, ib, isабо ipчи що - то (хоча я не знаю , чому ви б хочу цю функцію цілими реченнями)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.