Команди для природних мов – ЧАСТИНА 1

Термін текст має два широко поширених значення в нашій області компютерної науки Одне – це дані, які є послідовністю знаків Будь-який файл, який ви редагуєте за допомогою Emacs, – це текст в цьому сенсі слова Інше значення більш вузьке: послідовність знаків на природній мові, призначена для читання людьми (можливо після обробки форматуванням), на противагу програмам або командам для програми

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

Emacs має кілька основних режимів для редагування тексту на природній мові Якщо файл містить нескладний чистий текст, використовуйте режим Text, який швидко налаштовує Emacs на синтаксичні умовності тексту Режим Outline надає особливі команди для дій з з структурованим текстом Див Розділ 218 [Режим Outline], с 190

Для тексту, який містить вбудовані команди для програм форматування, Emacs має інші основні режими, свій для кожного формату Таким чином, для введення в TEX ви повинні використовувати режим TEX (Див Розділ 219 [Режим TeX], с 194)

Для введення в nroff – режим Nroff

Замість використання програми форматування, ви можете редагувати форматований текст у стилі WYSIWYG (what you see is what you get) 1 за допомогою режиму Enriched Тоді форматування зявляється на екрані в Emacs під час редагування Див Розділ 2111 [Форматований текст], с 198

211  Слова

У Emacs існують команди для пересування за словами або впливу на них За угодою, всі ключі для цього є Meta-знаками

Mf Перейти вперед через слово (forward-word)

Mb Перейти назад через слово (backward-word)

Md Знищити вперед все аж до кінця слова (kill-word)

M-hDELi         Знищити назад все аж до початку слова (backward-kill-word)

M-@ Помітити кінець наступного слова (mark-word)

Mt Переставити два слова або перенести одне слово через інші слова

(transpose-words)

Відмітьте, як ці ключі утворюють ряд, який відповідає ключам, які працюють зі знаками: Cf, Cb, Cd, hDELi  і C-t M-@ відповідає C-@, яка інакше називається C-hSPCi

Команди Mf (forward-word) and Mb (backward-word) пересувають вперед або назад через слова Таким чином, ці Meta-знаки аналогічні Cf і Cb, які пересувають

1 Що ви бачите, те й отримуєте (Прим перекладача)

через поодинокі знаки в тексті Аналогія поширюється на числові аргументи, які служать лічильниками повторів Mf з негативним аргументом пересуває назад, а Mb з негативним аргументом пересуває вперед Рух вперед зупиняється відразу після останньої літери слова, тоді як рух назад зупиняється відразу перед першою буквою

Md (kill-word) знищує слово після крапки Точніше, вона знищує все від точки до того місця, куди перемістила б команда Mf Таким чином, якщо точка знаходиться в середині слова, Md знищує тільки частина слова після крапки Якщо між точкою і наступним словом знаходяться якісь знаки пунктуації, то вони знищуються разом зі словом (Якщо ви хочете знищити тільки наступне слово, але не знищувати розділові знаки перед ним, то просто зробіть Mf, щоб перейти на кінець, і знищіть слово у зворотному напрямку за допомогою M-hDELi) Md трактує аргументи точно так само, як Mf

M-hDELi  (Backward-kill-word) знищує слово перед точкою Вона знищує все від точки назад до того місця, куди пересунула б Mb Якщо точка знаходиться після пробілу в FOO, BAR, то знищується FOO,. (Якщо ви хочете знищити просто FOO, зробіть Mb Md замість M-hDELi)

Mt (transpose-words) міняє місцями слово, що стоїть перед точкою або містить її, з наступним словом Розмежувальні знаки між словами не зсуваються Наприклад, FOO, BAR перетворюється в BAR, FOO , а не в BAR FOO, . Для більш детальної інформації про перестановки і аргументах команд перестановки дивіться Розділ 132 [Перестановка], с 101

Щоб подіяти на наступні n слів за допомогою операції, яка застосовується між точкою і влучною, ви можете або встановити мітку в точці і потім пересунути точку через слова, або використовувати команду M-@ (mark-word), яка не переміщує точку, але встановлює мітку туди, куди її пересунула б команда Mf M-@ приймає числовий аргумент, який говорить, через скільки слів потрібно помістити мітку У режимі Transient Mark ця команда активізує мітку

Поняття про синтаксис у команд, що працюють зі словами, повністю управляється синтаксичної таблицею Будь-який знак може бути оголошений, наприклад, як роздільник слів Див Розділ 316 [Синтаксис], с 366

212  Пропозиції

Команди Emacs для дій над пропозиціями та абзацами в більшості своїй придані Meta-ключам, щоб вони були подібні до команд роботи зі словами

Ma Перейти назад до початку пропозиції (backward-sentence)

Me Перейти вперед до кінця пропозиції (forward-sentence)

Mk Знищити вперед до кінця пропозиції (kill-sentence)

C-x hDELi     Знищити все в зворотному напрямку до початку пропозиції (backwardkill-sentence)

Команди Ma і Me (backward-sentence і forward-sentence) пересувають точку до початку і до кінця поточного пропозиції, відповідно Вони вибрані так, щоб нагадувати Ca і Ce, які зрушують до кінця і початку рядка На відміну від них, Ma і Me при повторенні або із заданими числовими аргументами пересувають через послідовні пропозиції

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

Точно так само, як Ca і Ce мають відповідну їм команду знищення Ck, так і Ma і Me мають відповідну команду знищення Mk (kill-sentence), яка знищує все від точки до кінця пропозиції З аргументом, рівним мінус одиниці, вона знищує в зворотному напрямку до початку пропозиції Великі аргументи служать для підрахунку повторів Є також особлива команда Cx hDELi  (Backward-killsentence) для знищення в зворотному напрямку до початку пропозиції Вона зручна, коли ви міняєте своє рішення в процесі твори тексту

Команди роботи з пропозиціями припускають, що ви прямуєте угодою американських друкарок – ставити в кінці речення два пробілу вони вважають пропозицію закінченим, якщо там є знаки .’, ?’ або !’, за якими слід кінець рядка або два пробілу в середині допустимо будь-яке число знаків ), ] або “‘. Пропозиція також починається або закінчується, якщо починається або закінчується абзац

Мінлива sentence-end управляє розпізнаванням кінця пропозиції Це регулярний вираз, яке відповідає останнім декільком знакам пропозиції разом з пробілами, наступними за пропозицією Його нормальне значення таке:

&quot[?!][]\&quot’)]*\\($\\|\t\\|  \\)[ \t\n]*&quot

Цей приклад пояснюється в розділі про регулярні вирази Див Розділ 125 [Регуляр-

ві вирази], с 91

Якщо ви хочете використовувати між пропозиціями тільки один пробіл, вам потрібно встановити sentence-end в таке значення:

&quot[?!][]\&quot’)]*\\($\\|\t\\| \\)[ \t\n]*&quot

Вам потрібно також встановити змінну sentence-end-double-space рівний nil, щоб команди заповнення очікували і залишали в кінці речень тільки один пробіл Зауважте, що при цьому неможливо відрізнити точки, завершальні пропозиції, і точок в скороченнях

213  Абзаци

Команди Emacs для роботи з абзацами – це також Meta-ключі

M-{Перейти назад до початку попереднього абзацу (backward-paragraph)

M-} Переміститися вперед до кінця наступного абзацу (forward-paragraph)

Mh Поставити крапку і мітку навколо цього або наступного абзацу (markparagraph)

M-{рухає точку в початок поточного або попереднього абзацу, в той час як M-} рухає її до кінця поточного або наступного абзацу Абзаци поділяються порожніми рядками і рядками команд форматування тексту, які в свою чергу не є частиною будь-якого абзацу У режимі Fundamental, але не в режимі Text, рядок з відступом також починає новий абзац (Якщо перед абзацом стоїть порожня рядок, дані команди вважають цю порожню рядок початком абзацу)

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

Коли є префікс заповнення, абзаци обмежуються усіма рядками, які не починаються з цього префікса Див Розділ 215 [Заповнення], с 185

Коли ви захочете оперувати з абзацом, ви можете використовувати команду Mh (markparagraph), щоб встановити навколо нього область Таким чином, наприклад, Mh Cw знищує абзац навколо або після точки Команда Mh ставить крапку на початку абзацу, який містить точку, і мітку в його кінці У режимі Transient Mark вона активізує мітку Якщо точка знаходиться між абзацами (в області порожніх рядків або на кордоні),

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

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

*

*