Пошук і заміна – ЧАСТИНА 1

Як і в інших редакторах, в Emacs є команди для пошуку випадків появи какойнибудь рядка Основна команда пошуку незвичайна тим, що вона є нарощуваної вона починає пошук до того, як ви закінчили набір рядка пошуку Існують також команди і для ненаращіваемого пошуку, більш схожі на аналогічні команди в інших редакторах

Крім звичайної команди replace-string, яка знаходить всі випадки появи одного рядка і замінює їх другий, Emacs має більш складну команду заміни, названу query-replace, яка запитує в інтерактивному режимі, в яких випадках треба провести заміну

121  Нарощуваний пошук

Нарощуваний пошук починається, як тільки ви набрали перші знак рядка пошуку У міру того, як ви набираєте рядок пошуку, Emacs показує вам, де цей рядок (у тому вигляді, в якому ви її вже набрали) може бути знайдена Коли ви набрали достатньо знаків, щоб визначити бажане місце, ви можете зупинитися Залежно від того, що ви збираєтеся робити потім, вам може знадобитися, а може і не знадобитися припинити пошук явно за допомогою hRETi

Cs нарощуються пошук вперед (isearch-forward)

Cr нарощуються пошук у зворотному напрямку (isearch-backward)

Cs починає нарощуваний пошук Cs зчитує знаки з клавіатури і розташовує курсор у першому місці появи знаків, які ви набрали Якщо ви наберете Cs і потім F, то курсор встане праворуч після перший знайденої F. Наберіть О, і побачите, що курсор встав за перший знайденої FO. Після ще однієї Про курсор встане за перше FOO, що знаходиться за місцем, з якого ви почали пошук На кожному кроці текст буфера, що співпадає з рядком пошуку, підсвічується, якщо термінал може це зробити поточна рядок пошуку оновлюється на кожному кроці в луна-області

Якщо ви зробили помилку в наборі рядка пошуку, то ви можете скинути знаки за допомогою hDELi КоженhDELi  скасовує останній знак рядка пошуку Цього не відбувається до тих пір, поки Emacs не буде готовий вважати наступний вводиться знак спочатку знак, який ви хочете скинути, повинен бути або знайдений, або немає Якщо ж ви не хочете чекати, поки це станеться, використовуйте Cg так, як описано нижче

Коли ви будете задоволені досягнутим місцем, ви можете набрати hRETi, Що зупинить пошук, залишаючи курсор там, куди його помістила команда пошуку Будь-яка команда, яка не має спеціального значення при пошуку, також зупиняє пошук і потім виконується сама Таким чином, набір Ca привів би до виходу з пошуку і потім пересунув б курсор на початок рядка hRETi  необхідний тільки в тому випадку, якщо наступна команда, яку ви хочете набрати, є друкованим знаком, hDELi, hRETi  або іншим керуючим знаком, мають особливе значення під час роботи пошуку (Cq, Cw, Cr, Cs, Cy, My, Mr або Ms)

Іноді ви шукаєте слово FOO і знаходите його, але це не те, що вам потрібно Було другий

‘FOO, про який ви забули, що знаходиться перед тим, яке ви шукаєте У цьому випадку наберіть Cs ще раз, щоб просунутися до наступного появи рядка пошуку Це можна проробляти необмежену число разів Якщо ви проскочили, то можете скасувати деякі число знаків Cs за допомогою hDELi

Після виходу з пошуку ви можете знову шукати ту ж саму рядок, просто набравши Cs Cs: перший Cs – це ключ, який запускає нарощуваний пошук, а другий Cs означає повтор пошуку.

Щоб ви могли знову використовувати більш ранні рядки пошуку, існує список пошуку Команди Mp і Mn пересувають за списком, щоб ви могли підібрати потрібний рядок для повторного пошуку Ці команди залишають обрану рядок пошуку в мінібуфер, де ви можете її відредагувати Для завершення редагування і початку пошуку наберіть Cs або Cr

Якщо ваша рядок взагалі не знайдена, то луна-область говорить Failing I-Search. Курсор розташовується після того місця, де Emacs знайшов з вашої рядки все, що зміг Таким чином, якщо ви шукаєте FOOT, а такого рядка немає, ви можете побачити курсор після

‘FOO в слові FOOL. З цього місця ви можете зробити кілька речей Якщо ваша рядок неправильно набрана, ви можете щось стерти з неї і виправити Якщо ви задоволені знайденим місцем, ви можете набрати hRETi  або будь-яку іншу команду Emacs, щоб прийняти те, що запропонував цей пошук, або ви можете набрати Cg, що знищить з рядка пошуку знаки, які не були знайдені (Т в FOOT), залишаючи ті, що знайшлися (FOO в FOOT) Другий Cg в цьому місці скасовує пошук повністю, повертаючи точку туди, де вона була, коли пошук почався

Якщо рядок пошуку містить велику літеру, то пошук проводиться з урахуванням регістру Якщо ви видалите заголовні букви з рядка пошуку, ця особливість зникає Див Розділ 126 [Пошук і регістр], с 95

Якщо пошук був невдалим і ви просите повторити його, набираючи Cs ще раз, то він починається знову з початку буфера Повторення невдалого пошуку в зворотному напрямку за допомогою команди Cr починає новий пошук з кінця Такий пошук називається круговим Як тільки це сталося, в підказці пошуку зявляється слово Wrapped. Якщо ви пройдете через точку, де почався пошук, це слово замінюється на Overwrapped, що означає, що ви знову проходите через вже бачені вами збіги

Знак виходу Cg надходить під час пошуку особливим чином Що саме він робить, залежить від статусу пошуку Якщо пошук знайшов те, що ви хотіли, і очікує введення, то Cg повністю скасовує пошук Курсор повертається туди, звідки ви почали пошук Якщо Cg набирається, коли в рядку пошуку є незнайдені знаки – Emacs все ще шукає їх, або він не зміг їх знайти – тоді ці незнайдені знаки скидаються з рядка пошуку Скидання цих знаків робить пошук успішним, і він чекає подальшого введення, таким чином, другий Cg скасує пошук повністю

Щоб знайти символ перекладу рядка, введіть Cj Для пошуку іншого керуючого знака, такого як control-S або повернення каретки, ви повинні скасувати їх спеціальне значення, набираючи перед ними Cq Ця функція Cq аналогічна її призначенням як команди для вставки (див Розділ 41 [Вставка тексту], с 35): вона змушує трактувати наступний знак так, як у цьому контексті трактувався б будь-який звичайний знак Ви також можете задати знак за його вісімковий коду: введіть Cq і потім послідовність вісімковий цифр

Ви можете змінити напрямок пошуку на зворотне за допомогою Cr Вам слід вчинити так, якщо пошук виявився невдалим, тому що місце, з якого ви його почали, знаходилося занадто близько до кінця файлу Повторення Cr продовжує пошук наступних випадків появи в зворотному порядку, а Cs починає пошук знову вперед Cr в пошуку може бути скасована за допомогою hDELi

Якщо ви заздалегідь знаєте, що вам потрібно вести пошук в зворотному порядку, то щоб почати пошук, ви можете використовувати Cr замість Cs, так як Cr також є ключем, що запускає команду (isearch-backward) для пошуку в зворотному порядку Зворотний пошук знаходить збіги, які розташовані перед початковою точкою, так само як пошук вперед знаходить збіги, що починаються після крапки, де пошук почався

Знаки Cy і Cw можуть використовуватися в нарощуються пошуку для захоплення тексту з буфера в рядок пошуку Це робить зручним пошук іншого випадку появи того тексту, який знаходиться в точці C-w копіює слово після крапки в рядок пошуку, просуваючи точку вперед через це слово Наступна команда Cs для повторення пошуку буде потім

шукати рядок, що включає це слово Cy подібна Cw, тільки копіює в рядок пошуку весь залишок поточного рядка І Cy, і Cw перетворять копійований текст до нижнього регістру, якщо пошук зараз ведеться без урахування регістру таким чином пошук залишається регістронезавісімий

Команда My копіює в рядок пошуку текст зі списку знищень Вона використовує той же текст, який був би відновлений командою Cy Див Розділ 92 [Відновлення], с 71

Коли ви виходите з наращиваемого пошуку, мітка встановлюється в те місце, де точка була до початку пошуку Це зручно для повернення до цього місця У режимі Transient Mark нарощуваний пошук встановлює мітку, що не активізуючи її, якщо тільки мітка вже не активна

Щоб налаштувати спеціальні знаки, які розуміє нарощуваний пошук, змініть їх привязки в таблиці ключів isearch-mode-map Для отримання переліку привязок подивіться документацію на isearch-mode з допомогою C-h f isearch-mode hRETi

1211  Нарощуваний пошук на повільному терміналі

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

Коли ви перериваєте пошук, однорядкове вікно забирається Тільки в цей момент Emacs перемальовує вікно, в якому проводився пошук, щоб відобразити нове положення точки

Такий стиль відображення використовується, коли швидкість терміналу в бодах менше або дорівнює значенню змінної search-slow-speed, чиє початкове значення дорівнює 1200

Кількість рядків, що показуються при пошуку на повільному терміналі, управляється змінної search-slow-window-lines Її звичайне значення дорівнює одиниці

Джерело: Річард Столмен, Керівництво по GNU Emacs

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*