Знищення і переміщення тексту – ЧАСТИНА 2

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

Це приклад рядка із зразком тексту

з точкою, показаної як . Якщо ви наберете M-d M-hDELM-d M-hDELi, Знищуючи по черзі вперед і назад, то наприкінці отримаєте приклад рядка із зразком в якості одного входження в списку знищень і Це тексту’ В буфері (Зверніть увагу на подвійний пробіл, який ви можете очистити за допомогою M-hSPCабо M-q)

Інший спосіб знищити той же текст – переміститися назад на два слова за допомогою Mb Mb і знищити всі чотири слова вперед командою Cu Md Це дає такий же результат в буфері і в списку знищень  M-f M-f C-u M-hDELi  знищує той же текст, проходячи весь час назад і знову результат буде тим же Текст в елементі списку знищень завжди має той же порядок, що він мав на буфері до того, як ви його знищили

Якщо команда знищення відокремлена від попередньої іншими командами (не просто числовим аргументом), то вона починає новий елемент у списку знищень Але ви можете змусити цю команду знищення додавати текст до попереднього елемента, набравши перед нею команду CMw (append-next-kill) CMw наказує наступній команді, якщо це команда знищення, додати знищений нею текст до останнього знищеному текстом замість того, щоб починати новий елемент За допомогою CMw ви можете знищити кілька окремих шматків тексту і накопичити їх для подальшого відновлення в одному місці

Команда знищення, наступна після Mw, не додає до тексту, який Mw ско-

бенкетувала в список знищень

923  Відновлення раніше знищеного

Для того щоб повернути знищений текст, який вже не є останнім знищеним, використовуйте команду My (yank-pop) Вона бере перш відновлений текст, і заміняє його текстом більш раннього знищення Так, щоб повернути текст, що передує останньому знищеному, спочатку використовуйте Cy, щоб відновити останній знищення, а потім My, щоб замінити його попереднім My може використовуватися тільки після Cy або інший My

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

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

наступна команда My знову поміщає його на перший елемент

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

My може отримати числовий аргумент, який говорить, на скільки елементів вперед просунути покажчик на останнє відновлення. Негативний аргумент рухає цей покажчик у напрямку до початку списку від початку списку він рухає до останнього елемента і продовжує рух вперед звідти

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

Якщо ви знаєте, скільки команд My необхідно набрати, щоб знайти Вас текст, ви можете відновити цей текст за один крок, використовуючи Cy з числовим аргументом Cy з аргументом відновлює текст, записаний у списку знищення на задане число елементів тому Таким чином, Cu 2 Cy дістає наступний за останнім блок знищеного тексту Це еквівалентно C-y M-y C-y c числовим аргументом починає підрахунок від покажчика на останнє відновлення і встановлює цей покажчик на елемент, який ця команда відновлює

Довжина списку знищень управляється змінної kill-ring-max не може бути записано більше блоків тексту, ніж визначено цією величиною

Дійсне вміст списку знищень зберігається у змінній kill-ring ви можете переглянути всі вміст списку знищень за допомогою команди Ch v kill-ring

93  Накопичення тексту

Зазвичай ми копіюємо або переносимо текст шляхом його знищення і відновлення, але існують і інші способи, зручні для копіювання одного блоку тексту в багато місця або для копіювання багатьох розсіяних блоків тексту в одне місце Щоб скопіювати один блок у багато місць, запишіть його в регістр (див Глава 10 [Регістри], с 77) Тут ми описуємо команди для накопичення розкиданих шматків тексту в буфер або у файл

M-x append-to-buffer

Додати область в заданий буфер після крапки

M-x prepend-to-buffer

Додати область в заданий буфер перед точкою

M-x copy-to-buffer

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

M-x insert-buffer

Вставити вміст заданого буфера в поточний буфер в точці

M-x append-to-file

Додати область в кінець заданого файлу

Для накопичення тексту в буфері використовується Mx append-to-buffer Вона зчитує імя буфера, а потім вставляє в цей буфер копію області Якщо буфер з таким імям не існує, то append-to-buffer створить його Текст вставляється в те місце в цьому

буфері, де знаходиться точка Якщо ви використовували цей буфер для редагування,

скопійований текст вставляється в середину тексту, де опинилася точка

Точка в цьому буфері залишається в кінці копійованого тексту, таким чином, послідовне використання append-to-buffer накопичує текст в заданому буфері в тому ж самому порядку, в якому частини були скопійовані Строго кажучи, append-to-buffer не завжди додає до тексту, вже знаходиться в буфері – вона додає, якщо точка знаходиться в кінці цього буфера Однак, якщо append-to-buffer є єдиною командою, яку ви використовуєте для зміни буфера, точка завжди розташована в кінці

Mx prepend-to-buffer подібна append-to-buffer за винятком того, що крапка в іншому буфері залишається перед скопійованим текстом, таким чином, послідовне застосування цієї команди додає текст в зворотному порядку Mx copy-to-buffer діє так само, за винятком того, що будь-який існуючий текст в іншому буфері віддаляється, так що в буфері залишається лише знову скопійований текст

Щоб повернути накопичений текст з іншого буфера, використовуйте команду Mx insert-buffer вона також приймає імя буфера як аргумент Ця команда вставляє копію тексту з буфера із заданим імям в обраний буфер Або ви можете вибрати інший буфер для редагування, можливо, переміщаючи згодом текст з нього шляхом знищення Див Глава 15 [Буфери], с 135, для отримання базової інформації про буферах

Замість накопичення тексту всередині буфера Emacs ви можете додати текст безпосередньо у файл за допомогою команди Mx append-to-file, яка використовує імя файлу як аргумент Вона додає текст області в кінець заданого файлу Файл на диску змінюється відразу

Ви повинні використовувати append-to-file тільки з файлами, до яких ви не звертаєтеся з Emacs Використання цієї команди для файлу, до якого звернулися з Emacs, може змінити файл без відома Emacs, що може призвести до втрати деяких результатів вашого редагування

94  Прямокутники

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

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

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

Cx rk Знищити текст області-прямокутника, зберігаючи його вміст в якос-

стве останнього знищеного прямокутника (kill-rectangle)

Cx rd Видалити текст області-прямокутника (delete-rectangle)

Cx ry Відновити останній знищений прямокутник, поміщаючи його верхній лівий кут в точці (yank-rectangle)

Cx ro Вставити порожнє місце, заповнюючи простір області-прямокутника (open-rectangle) Попередній вміст області-прямокутника виштовхується вправо

M-x clear-rectangle

Очистити область-прямокутник, замінюючи її вміст пробілами

M-x delete-whitespace-rectangle

Видалити пробільні знаки в кожному рядку заданого прямокутника, начи-

ная з його самого лівого стовпця

C-x r t рядок hRETi

Вставити рядок в кожен рядок області-прямокутника (stringrectangle)

Операції, що працюють з прямокутниками, діляться на два класи: команди видалення і вставки прямокутників і команди для порожніх прямокутників

Існує два способи позбутися від тексту в прямокутнику: ви можете скинути (видалити) його або записати його як останній знищений прямокутник Для цього використовуються дві команди Cx rd (delete-rectangle) і C-x r k (kill-rectangle) В обох випадках частина кожного рядка, яка потрапила всередину кордонів прямокутника, віддаляється, змушуючи подальший текст в рядку (якщо він існує) зрушуватися вліво

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

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

Ви можете перетворити списки з однієї колонки в списки з двох колонок, використовуючи знищення і відновлення прямокутників знищіть другу половину списку як прямокутник і потім відновите його поряд з першою строчкою списку Див Розділ 309 [Two-Column], с 336, інший спосіб редагувати двоколонковому текст

Прямокутники також можуть бути скопійовані в регістри і з регістрів за допомогою

C-x r r r і C-x r i r Див Розділ 103 [Регістри для прямокутників], с 78

Є дві команди для роботи з порожніми прямокутниками: Mx clear-rectangle, щоб розписати пробілами існуючий текст, і Cx ro (open-rectangle), щоб вставити порожній прямокутник Очищення прямокутника еквівалентна його видалення з подальшою вставкою на його місце порожнього прямокутника такого ж розміру

Команда Mx delete-whitespace-rectangle видаляє горизонтальне порожній простір, починаючи з певного стовпця Це відноситься до кожного рядка в прямокутнику, а стовпець задається лівим краєм прямокутника Правий край прямокутника не має значення для цієї команди

Команда Cx rt (Mx string-rectangle) заміщає прямокутник заданої рядком (вставляючи її один раз на кожен рядок) Ширина рядка не зобовязана збігатися з шириною прямокутника Якщо ширина рядка менше, текст після прямокутника зміщується вліво якщо рядок ширше прямокутника, текст після нього зміщується вправо

10 Регістри

Регістри Emacs – це місця, куди ви можете записати текст або позиції для подальшого використання Текст або прямокутник, одного разу записаний в регістр, може бути скопійований в буфер один або кілька разів позицію, записану в регістр, можна один або кілька разів використовувати для пересування до неї точки

Кожен регістр має імя, що складається з одиночного знака Регістр може зберігати шматок тексту, позицію, прямокутник, конфігурацію вікна або імя файлу, але тільки чтото одне з перерахованого в кожен конкретний момент Всякий раз, коли ви зберігаєте щось в регістрі, воно залишається там до тих пір, поки ви не помістіть в цей регістр щось ще Щоб дізнатися, що містить регістр r, Використовуйте M-x view-register

M-x view-register hRETi r

Видати опис того, що містить регістр r

101  Запис позицій в регістри

Збереження позиції записує місце розташування в буфері, так що ви можете повернутися туди пізніше Перенесення в записану позицію заново вибирає буфер і пересуває точку в це місце

C-x r hSPCi r

Записати положення точки в регістр r (point-to-register)

C-x r j r    Перейти в позицію, записану в регістрі r (jump-to-register)

Щоб записати поточне положення точки в регістр, виберіть імя r і наберіть C-x r hSPCi r Регістр r зберігає записане таким чином положення до тих пір, поки ви не запишете в цей регістр щось інше

Команда C-x j r пересуває точку в позицію, записану в регістрі r Регістр не зачіпається, він продовжує зберігати ту ж саму позицію Ви можете перейти в одну і ту ж позицію, використовуючи один і той же регістр, будь-яке число разів

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

102  Запис тексту в регістри

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

C-x r s r    Копіювати область в регістр r (copy-to-register)

C-x r i r    Вставити текст з регістра r (insert-register)

C-x r s r записує копію тексту області в регістр з імям r Запущена з число-

вим аргументом, C-x r s r крім того видаляє текст з буфера

C-x r i r вставляє в буфер текст з регістра r Зазвичай ця команда залишає точку перед текстом, а мітку розпорядженні після нього, але з числовим аргументом (Cu), навпаки, крапку ставить після тексту, а мітку перед ним

103  Запис прямокутників в регістри

Регістр може містити замість лінійного тексту прямокутник Прямокутники представляються у вигляді списку рядків Див Розділ 94 [Прямокутники], с 74, для отримання основної інформації по прямокутниках і про те, як вони визначаються в буфері

C-x r r r    Копіює область-прямокутник в регістр r (Copy-region-to-rectangle) З

числовим аргументом ще і видаляє його

C-x r i r    Вставляє прямокутник, який записаний в регістрі r (Якщо той містить прямокутник) (insert-register)

Команда C-x r i r вставляє рядок тексту, якщо регістр містить рядок, і вставляє прямокутник, якщо реєстр містить прямокутник

Дивіться також команду sort-columns, яку можна розглядати як команду сортування прямокутника Див Розділ 307 [Сортування], с 333

104  Запис конфігурації вікон в регістри

Ви можете записати в регістр конфігурацію вікон в обраному фреймі або навіть кон-

фигураций всіх вікон у всіх фреймах і пізніше відновити цю конфігурацію

C-x r w r    Записати стан вікон обраного фрейма в регістрr    (windowconfiguration-to-register)

C-x r f r    Записати стан всіх фреймів, включаючи всі їхні вікна, в регістрr  (frame configuration-to-register)

Використовуйте C-x r j r для відновлення конфігурації вікон або фреймів Це та ж команда, що використовується для відновлення позиції курсора Коли ви відновлюєте конфігурацію фреймів, всі існуючі фрейми, що не входять в цю конфігурацію, стають невидимими Якщо ви замість цього хочете видалити ці фрейми, використовуйте Cu Cx rj r

105  Зберігання чисел в регістрах

Існують команди для запису числа в регістр, вставки його в буфер в десятковому вигляді та для збільшення цього числа Ці команди можуть бути корисні в макросах клавіатури (див Розділ 313 [Макроси клавіатури], с 353)

C-u число C-x r n рег

Записати число в регістр рег (number-to-register)

C-u число C-x r + рег

Збільшити число в регістрі рег на задане число (increment-register)

C-x r g рег

Вставити число з регістра рег в буфер

Cx rg – це та ж команда, що використовується для вставки в буфер вмісту регістрів іншого типу

106  Запис імен файлів в регістри

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

(set-register r  (File Імя))

Наприклад,

(set-register z ’(file &quot/gd/gnu/emacs/190/src/ChangeLog&quot))

поміщає показане імя файлу в регістр z.

Щоб звернутися до файлу, чиє імя знаходиться в регістрі r, Наберіть C-x r j r (Це та ж команда, що використовується для переходу до записаної позиції або відновлення конфігурації фреймів)

107  Закладки

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

C-x r m hRETi

Закласти закладку в поточному файлі в позиції точки

C-x r m закладка hRETi

Закласти в точці закладку з імям закладка (bookmark-set)

C-x r b закладка hRETi

Перейти до закладки з імям закладка (bookmark-jump)

Cx rl Перелічити всі закладки (list-bookmarks)

M-x bookmark-save

Зберегти всі поточні значення закладок у файлі закладок, використовуваному за замовчуванням

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

Щоб відобразити список всіх ваших закладок в окремому буфері, наберіть Cx rl (list-bookmarks) Якщо ви перейдіть в цей буфер, ви зможете відредагувати визначення закладок або дати їм опису Наберіть в цьому буфері Ch m для отримання більш докладних відомостей про спеціальні командах редагування в ньому

Коли ви знищуєте Emacs, він запропонує вам зберегти значення закладок у вашому файлі закладок за замовчуванням, ~ / Emacsbmk, якщо ви змінювали які-небудь з цих значень Ви також можете зберегти закладки в будь-який час за допомогою команди Mx bookmark-save Команди, що працюють з закладками, автоматично завантажують ваш файл закладок за замовчуванням Завдяки цим збереження і завантаження закладки переходять від одного сеансу Emacs до іншого

Якщо ви встановите змінну bookmark-save-flag в значення 1, то кожна команда, що встановлює ятати, також буде записувати ваші закладки при цьому ви не втратите значення закладок, навіть якщо Emacs зупиняється аварійно (Це значення, якщо воно є числом, каже, скільки змін закладок проходить між збереженнями)

Значення позицій в закладках зберігаються разом з навколишнім контекстом, так що bookmark-jump може знайти правильну позицію, навіть якщо файл був злегка змінений Мінлива bookmark-search-size каже, скільки знаків контексту по обидві сторони від позиції закладки потрібно записувати

Ось кілька додаткових команд для роботи з закладками:

M-x bookmark-load hRETімяфайлу hRETi

Завантажити файл з імям імяфайлу, що містить список значень закладок Ви можете використовувати цю команду, як і команду bookmark-write, для роботи з іншими файлами закладок крім вашого файлу закладок за замовчуванням

M-x bookmark-write hRETімяфайлу hRETi

Зберегти всі поточні значення закладок у файлі імяфайлу

M-x bookmark-delete  hRETзакладка hRETi

Видалити закладку з імям закладка

M-x bookmark-insert-location hRETзакладка hRETi

Вставити в буфер імя файлу, на який вказує закладка закладка

M-x bookmark-insert hRETзакладка hRETi

Вставити в буфер вміст файлу, на який вказує закладка заклад

ка

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

*

*