Позначка і область

Існує безліч команд Emacs, які працюють з довільною безперервної частиною поточного буфера Щоб задати текст, над яким працюють такі команди, ви встановлюєте мітку в одному кінці цього тексту, і пересуваєте крапку в інший його кінець Текст, розташований між точкою і влучною, називається областю Якщо ви задіяли режим Transient Mark, Emacs виділяє область кольором (див Розділ 82 [Transient Mark], с 64)

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

Багато команд, які вставляють текст, наприклад Cy (yank) і Mx insert-buffer, розташовують мітку в одному з кінців вставленого тексту, протилежному тому, де поміщається точка, таким чином, область містить тільки що вставлений текст

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

81  Установка мітки

Тут наводяться деякі команди для установки мітки:

C-hSPCi         Встановити мітку в точці (set-mark-command)

C-@ Те ж саме

Cx Cx Поміняти місцями мітку і точку (exchange-point-and-mark)

Drag-Mouse-1

Встановити точку і позначити текст, по якому ви провели

Mouse-3 Встановити мітку в точці і перемістити точку до позиції, на якій ви клац-

нулі (Mouse-save-then-kill)

Наприклад, якщо ви хочете перетворити частину буфера так, щоб він весь був набраний прописними буквами, ви можете використовувати команду Cx Cu (upcase-region), яка оперує з текстом в області Ви можете спочатку відправиться в початок тексту, який повинен бути написаний прописними літерами, набрати C-hSPCi, Щоб встановити там мітку, пересунутися в кінець тексту і потім набрати Cx Cu Або ви можете встановити мітку в кінці тексту, зрушити в початок і потім набрати Cx Cu

Найбільш загальний спосіб установки мітки – робити це за допомогою команди C-hSPC(Set-mark-command) Так встановлюється позначка в позиції точки Потім ви можете відсунути точку, залишаючи мітку на місці

Є два способи встановити мітку за допомогою миші Ви можете провести мишею з натиснутою першою кнопкою по відрізку тексту це помістить точку там, де ви відпустили кнопку миші, і встановить мітку на іншому кінці цього відрізка Або ви можете клацнути третій кнопкою миші, що встановлює мітку в точці (як C-hSPCi) І потім переміщує точку (як Mouse-1) Обидва ці способи крім установки мітки копіюють область в список знищень така поведінка відповідає поведінці інших віконних додатків, але якщо ви не хочете змінювати список знищень, ви повинні використовувати для установки мітки команди клавіатури Див Розділ 171 [Команди миші], с 147

На звичайних терміналах є тільки один курсор, так що Emacs не може показати вам місцезнаходження мітки Ви повинні його памятати Звичайний вихід із ситуації – встановити мітку, а потім швидко її використовувати до того, як ви забудете, де вона розташована Але ви можете побачити позицію мітки за допомогою команди Cx Cx (exchange-point-andmark), яка встановлює мітку туди, де була точка, а точку туди, де була мітка Положення області залишається незмінним, а курсор і точка знаходяться тепер в попередній позиції мітки У режимі Transient Mark ця команда активізує позначку

Cx Cx також корисна, коли ви задоволені становищем точки, але хочете пересунути інший кінець області (де знаходиться мітка) зробіть Cx Cx для того, щоб встановити точку на місце мітки, і потім ви можете рухати мітку Використовуючи Cx Cx вдруге, якщо це необхідно, ви встановите мітку в новій позиції, а точку повернете в її колишню позицію

У ASCII не існує знака C-hSPCi коли ви набираєте hSPCi, Утримуючи hCTRLi  в натиснутому положенні, на більшості звичайних терміналів ви отримаєте знак C-@ Це і є ключ, фактично привязаний до set-mark-command Але якщо ви не настільки невдачливі, щоб отримати термінал, де набираючи C-hSPCi, Ви не отримуєте C-@, ви можете думати про це знаку як про C-hSPCi Під X, C-hSPCнасправді є окремим знаком, але привязаний він все одно до set-mark-command

82  Режим Transient Mark

Emacs може підсвічувати поточну область, використовуючи X Windows Але зазвичай він цього не робить Чому

Підсвічування області зазвичай не працює в Emacs добре, тому що як тільки ви поставили мітку, завжди є область (в цьому буфері) А постійна підсвічування області дратувала б

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

Щоб включити режим Transient Mark, виконайте команду Mx transient-mark-mode Ця команда перемикає даний режим, а значить ви можете повторити її для виключення цього режиму

Ось подробиці про режим Transient Mark:

Щоб встановити мітку, введіть C-hSPCi  (Set-mark-command) Це зробить мітку активної при переміщенні точки ви побачите, що область збільшується або зменшується

Команди миші для завдання позначки також роблять її активною Те ж роблять і команди клавіатури, чия мета – встановити область, включаючи M-@, CM-@, Mh, CMh, Cx Cp і Cx h

Коли мітка активна, ви можете виконувати команди, що діють на область, такі як знищення, створення відступу або запис у файл

Будь-яка зміна буфера, наприклад вставка або видалення знака, деактивізує позначку Це означає, що подальші команди, що діють на область, отримають помилку і не зможуть працювати Ви можете зробити область знову активної, ввівши Cx Cx

Команди ніби M-> і Cs, які залишають мітку крім якоїсь іншої основної мети, не активізують нову позначку Ви можете активізувати нову область, виконавши Cx Cx (exchange-point-and-mark)

Cs не змінює позначку, якщо вона активна

Вихід за допомогою Cg деактивізує мітку

Для підсвічування області використовується накреслення region ви можете налаштувати спосіб підсвічування області, змінивши це накреслення Див Розділ 31223 [Налаштування накреслень], с 347

Коли кілька вікон показують один і той же буфер, вони мають різні області, тому що у них можуть бути різні значення точки (хоча всі вони мають однакову позицію мітки) Зазвичай тільки вбрання вікно підсвічує область (див Глава 16 [Вікна], с 141) Однак, якщо змінна highlight-nonselected-windows не дорівнює nil, то кожне вікно підсвічує свою область (якщо включений режим Transient Mark, і мітка в буфері цього вікна активна)

Коли режим Transient Mark не включений, кожна команда, що встановлює мітку,

також і активізує її, але ніщо не деактивізує мітку

Якщо в режимі Transient Mark мінлива mark-even-if-inactive не дорівнює nil, то команди можуть використовувати позначку і область, навіть якщо вони не активні Підсвічування області зявляється і зникає так само, як звичайно в режимі Transient Mark, але мітка насправді не зникає, коли зникає підсвічування

Режим Transient Mark також відомий як режим Zmacs, тому що редактор Zmacs

на MIT Lisp Machine звертався з позначкою схожим чином

83  Робота з областю

Як тільки ви створили область, і мітка активна, ви можете робити різні речі з текстом цій області:

Знищити його за допомогою Cw (див Розділ 91 [Знищення], с 69)

Записати його в регістр за допомогою Cx rs (див Глава 10 [Регістри], с 77)

Записати його в буфер або файл (див Розділ 93 [Накопичення тексту], с 73)

Перетворити регістр за допомогою Cx Cl або Cx Cu (див Розділ 216 [перетворюючої-

вання регістра букв], с 189)

Зробити відступ за допомогою C-x hTABабо CM-\ (див Глава 20 [Відступи], с 177)

Заповнити його як текст за допомогою Mx fill-region (див Розділ 215 [Заповнення],

с 185)

Роздрукувати за допомогою Mx print-region (див Розділ 304 [Роздруківка], с 331)

Обчислити його як Лісп-код за допомогою Mx eval-region (див Розділ 238 [Обчислити-

ня Лиспа], с 254)

Більшість команд, які оперують з текстом в області, в своєму імені містять слово region

84  Команди для позначки текстуальних обєктів

Тут представлені команди для приміщення точки і мітки навколо текстуальних обєк-

ектов, таких як слово, список, абзац або сторінка

M-@ Встановити мітку після кінця наступного слова (mark-word) Ця і слідую-

щая команди не пересувають точку

CM-@ Встановити мітку після кінця наступного Лісп-вирази (mark-sexp)

Mh Встановити область навколо абзацу (mark-paragraph)

CMh Встановити область навколо поточного визначення функції Лиспа (markdefun)

Cx h Встановити область навколо всього поточного буфера (mark-whole-buffer)

Cx Cp Встановити область навколо поточної сторінки (mark-page)

M-@ (mark-word) встановлює мітку в кінці наступного слова, а CM-@ (mark-sexp) встановлює її в кінець наступного виразу Лиспа Ці команди обробляють свої аргументи так само, як Mf і CMf

Інші команди встановлюють як мітку, так і точку, щоб обмежити обєкт в буфері Наприклад, Mh (mark-paragraph) пересуває точку в початок абзацу, який оточує точку або слід за нею, і встановлює мітку в кінці цього абзацу (див Розділ 213 [Абзаци], с 183) Ця команда готує область, щоб ви могли зробити відступи, переключити регістр або знищити весь абзац

CMh (mark-defun) також встановлює точку попереду, а мітку після поточного або наступного визначення функції (див Розділ 224 [Визначення функцій], с 208) Cx Cp (mark-page) встановлює точку перед поточною сторінкою, а мітку – наприкінці сторінки (див Розділ 214 [Сторінки], с 184) Позначка йде після обмежувача сторінки (щоб включити і його), точка йде після обмежувача попередньої сторінки (Щоб виключити його) Числовий аргумент задає більш пізню сторінку (якщо аргумент позитивний) або більш ранню (якщо він негативний) замість поточної сторінки

Нарешті, Cx h (mark-whole-buffer) позначає весь буфер як область, встановлюючи точку в початок, а мітку в кінець

У режимі Transient Mark всі ці команди активізують мітку

85  Список позначок

Крім обмеження області, позначка служить також для запамятовування місця, в яке ви хотіли б повернутися Щоб зробити цю можливість більш корисною, Emacs запамятовує 16 попередніх позицій мітки в списку позначок Більшість команд, які встановлюють мітку, вставляють стару мітку в цей список Щоб повернутися до зазначеної позиції, використовують Cu C-hSPCi  (Або Cu C-@), це команда set-mark-command, якій дано числовий аргумент Вона пересуває точку туди, де була позначка, і відновлює мітку зі списку колишніх позначок Так, повторне використання цієї команди пересуває точку до всіх старим позначками у списку, до однієї за одною Мітки, через які ви проходите, потрапляють в кінець списку, таким чином жодна з них не пропадає

Кожен буфер має свій власний список позначок Всі команди редагування використовують список позначок поточного буфера Зокрема, C-u C-hSPCi  завжди залишається в тому ж самому буфері

Багато команд, передвигающие на великі відстані, такі, наприклад, як M-< (Beginning-of-buffer), починають з установки мітки і записи старого значення в список позначок. Це зроблено для того, щоб вам було легше згодом повернутися назад. Пошуки роблять це за винятком тих випадків, коли вони практично не рухають точку. Ви можете бачити, коли яка-небудь команда встановлює мітку, по тому, що вона друкує в луна-області повідомлення 'Mark Set'.

Якщо ви хочете повертатися до одного й того ж місця знову і знову, список позначок може виявитися недостатньо зручним У такому випадку ви можете записати позицію в регістр для подальшого отримання (див Розділ 101 [Зберігання позицій в регістрах], с 77)

Мінлива mark-ring-max задає максимальне число елементів у списку позначок Якщо вже є максимальна кількість елементів, і заталкивается ще один, то останній з існуючого списку скидається Повторення C-u C-hSPCi  прокручує серед позицій, які знаходяться в даний момент у списку

Мінлива mark-ring зберігає сам список позначок як список помічених обєктів, де першим йде записаний самим останнім Дана змінна є локальною в кожному буфері

86  Глобальний список позначок

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

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

Команда C-x C-hSPCi  (Pop-global-mark) переводить до буферу і позиції останнього входження в глобальному списку позначок Вона також марнотратить цей список, щоб послідовне застосування команди Cx C-hSPCпереміщував вас до все більш раннім буферам

Джерело: Річард Столмен, Керівництво по 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>

*

*