<Попередній | зміст | Наступна>
Глобальний пошук і заміна
vi використовує команду ex для виконання операцій пошуку та заміни (так звані «підстановка» у vi) над діапазоном рядків або цілим файлом. Щоб змінити слово «рядок» на «рядок» для всього файлу, ми б ввели таку команду:
:%s/рядок/рядок/g
:%s/рядок/рядок/g
Давайте розберемо цю команду на окремі елементи та подивимося, що робить кожна з них:
Таблиця 12-5: Приклад глобального синтаксису пошуку та заміни
Пункт Значення
Пункт Значення
: символ двокрапки запускає команду ex.
% Визначає діапазон рядків для операції. % це скорочення, яке означає від першого до останнього рядка. З іншого боку, можна було вказати діапазон 1,5 (оскільки наш файл має п'ять рядків), або 1 $ що означає «від рядка 1 до останнього рядка у файлі». Якщо діапазон рядків опущено, операція виконується лише для поточного рядка.
Пошук і заміна
s Визначає операцію. У цьому випадку заміна (пошук і заміна).
/Рядок/рядок/ Шаблон пошуку та текст заміни.
g Це означає «глобальний» у тому сенсі, що пошук і заміна виконується для кожного екземпляра рядка пошуку в рядку. Якщо пропущено, замінюється лише перший екземпляр рядка пошуку в кожному рядку.
Після виконання нашої команди пошуку та заміни наш файл виглядає так:
Швидкий бурий лис перестрибнув через ледачого пса. Це було круто. рядок 2
лінія 3
лінія 4
лінія 5
Швидкий бурий лис перестрибнув через ледачого пса. Це було круто. рядок 2
лінія 3
лінія 4
лінія 5
Ми також можемо вказати команду заміни з підтвердженням користувача. Це робиться шляхом додавання «c» в кінці команди. Наприклад:
:%s/рядок/рядок/gc
:%s/рядок/рядок/gc
Ця команда поверне наш файл до попереднього вигляду; однак перед кожною заміною, vi зупиняється та просить нас підтвердити заміну за допомогою цього повідомлення:
замінити на рядок (y/n/a/q/l/^E/^Y)?
замінити на рядок (y/n/a/q/l/^E/^Y)?
Кожен із символів у дужках є можливим наступним чином:
Таблиця 12-6: Замініть ключі підтвердження
Ключова дія
Ключова дія
y Виконайте заміну.
n Пропустити цей екземпляр шаблону.
a Виконайте заміну цього та всіх наступних екземплярів шаблону.
q або Esc Завершіть заміну.
l Виконайте цю заміну, а потім вийдіть. Скорочено від «останнього».
Ctrl-e, Ctrl-y Прокрутка вниз і прокрутка вгору відповідно. Корисно для перегляду контексту запропонованої заміни.
Якщо набираєте y, буде виконана заміна, n викличе vi щоб пропустити цей екземпляр і перейти до наступного.