Як вибірково змінити виділений рядок?


11

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

Мені знайоме, :%s/old/new/gале я не хочу змінювати всі екземпляри. Натомість я хочу перенести курсор до кожного примірника, а потім вирішити, чи потрібно його змінювати.

Відповіді:


16

Використовуйте gnрух, щоб відредагувати поточну відповідність пошуку. Наступний приклад змінить поточний збіг на "FooBar":

cgnFooBar

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

Vimcasts має приємний епізод з цього приводу: Робота з пошуковими матчами за допомогою gn

Докладнішу інформацію див.

:h gn

Це, безумовно, шлях, коли у вас є різні рядки заміни, які потрібно використовувати в різних місцях. Я не впевнений у нюансах візуального режиму, на який, схоже, посилається gn, тому ось такий метод, який я щойно відкрив:c//e<CR>FooBar<Esc>//<CR>
Джефф

Чи є спосіб змінити всі вибори / матчі одночасно? В основному, на рефактор?
Геремія

@Geremia, так, :%s/oldtext/newstuff/gзмінить всі матчі oldtextна newstuff.
zundarz

@zundarz Я не хочу робити регулярний вираз, а замінювати лише імена змінних. Замість удару .кілька разів, я можу використовувати :%norm .( джерело ).
Джеремия

7

Якщо ви вже шукали слово за допомогою /wordабо ?word.

Ви можете :%s//newword/gcзамінити слово, яке ви раніше шукали newword, залишивши пошуковий термін ( s//..) порожнім.

У cпрапорі зазначено, що кожну зміну слід підтвердити, натиснувши кнопку " yТак" або " nНі".

Подивіться :help :s_flagsдля отримання додаткової інформації про підтвердження прапора.


1
Я знаю , що ви сказали , щоб подивитися на допомогу, але ви можете також чітко згадати , де ви також можете натиснути l, aі q(або <Esc>) різні способи , щоб обернути цикл підтвердження.
Джефф

2

Спосіб №1

Ви можете скористатися gnта gNвідображенням, щоб виконати те, що вам потрібно. gnбуде шукати останній пошуковий термін і візуально вибере відповідність. gNробить точно те саме, за винятком того, що він шукає назад. У поєднанні з таким оператором, як c, наприклад , оператор буде застосовано до відповідності, наприклад, якщо ваш останній рядок пошуку "foo" і ви введете cgn, він буде шукати вперед наступний екземпляр "foo", видаляти його та перевести вас у режим вставки, щоб ввести текст заміни.

Більш детальну інформацію про них див :help gnі :help gN.

Спосіб №2

Ви можете використовувати :substituteкоманду з cпрапором. Це попросить підтвердити кожну заміну. Наприклад, скажіть, що ви хотіли замінити foo на бар у всьому файлі, але хотіли підтвердити кожну заміну:

:%s/foo/bar/gc

Більш докладно про це приведена в наступних розділах довідки: :help :s_flags, :help cmdline-ranges, і :help :substitute.

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