Основні режими

Emacs надає багато різних основних режимів, кожен з яких налаштовує Emacs на редагування тексту певного виду є взаємовиключними, і кожен буфер знаходиться в кожен момент часу в одному основному режимі Рядок режиму зазвичай містить імя поточного основного режиму в круглих дужках (див Розділ 13 [Рядок режиму], с 25)

Найменш спеціалізований основний режим називається Fundamental Цей режим не має спеціальних режимних перевизначень або встановлюваних змінних, так що кожна команда Emacs поводиться самим звичайним чином і кожен параметр знаходиться в своєму стані по замовчуванням Для редагування деякого тексту певного типу, такого як код на Ліспі або англійський текст, ви повинні перемкнути Emacs до відповідного основний режим, такий як режим Lisp або режим Text

Вибір основного режиму змінює значення декількох ключів таким чином, щоб вони стали більш пристосованим до редагованого мови Одні з найбільш часто змінюваних ключів – це hTABi, hDELі C-j Префіксний ключ Cc зазвичай містить команди, специфічні для режиму Крім цього, команди для управління коментарями використовують режим для визначення того, яким чином коментарі повинні обмежуватися Багато основні режими перевизначають синтаксичні властивості знаків, що зявляються в буфері Див Розділ 316 [Синтаксис], с 366

діляться на три основних групи Режим Lisp (який має декілька варіантів), режим C і режим Fortran – для специфічних мов програмування Режим Text, режим Nroff, режим TEX і режим Outline – для редагування

тексту на природній мові Решта основні режими не призначені для ис-

користування з файлами користувачів вони використовуються в буферах, створюваних Emacs для спеціальних цілей, це такі режими, як режим Dired для буферів, створених Dired (див Глава 28 [Dired], с 291), режим Mail для буферів, створених за допомогою Cx m (див Глава 26 [Посилка пошти], с 267), і режим Shell для буферів, використовуваних для звязку з підлеглим процесом оболонки (див Розділ 3022 [Інтерактивна оболонка], с 324)

Більшість основних режимів для мов програмування вказують, що тільки порожні рядки поділяють абзаци Таким чином, команди роботи з абзацами залишаються зручними (Див Розділ 213 [Абзаци], с 183) Вони так само змушують режим Auto Fill використовувати визначення hTABi  для створення відступу у знову створюваних ним рядках Це ДАЛЕТ, оскільки більшість рядків у програмі зазвичай починаються з відступу (Див Глава 20 [Відступи], с 177)

191  Як вибираються основні режими

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

Явний вибір нового основного режиму робиться за допомогою команди Mx Щоб отримати імя команди для вибору режиму, додайте до імені основного режиму закінчення

-Mode Таким чином, ви можете увійти в режим Lisp, виконавши команду Mx lisp-mode

Коли ви звертаєтеся до файлу, Emacs зазвичай вибирає правильний основний режим, грунтуючись на імені цього файлу Наприклад, файли, чиї імена закінчуються на . С, редагуються в режимі С Відповідність між імям файлу і основним режимом контролюється змінної auto-mode-alist Її значення – це список, кожен елемент якого має такий вигляд:

(Регулярневираз функціярежиму)

або такий:

(Регулярневираз функціярежиму прапор)

Наприклад, один елемент, зазвичай знаходиться в цьому списку, має вигляд (\ \ C \ \ “. Cmode), і це є сигналом для вибору режиму С для файлів, чиї імена закінчуються на. С . (Зазначимо, що \ \ необхідно по синтаксису Лиспа для того, щоб включити в цей рядок знак \, а він потрібен для придушення спеціального значення .’ в регулярному виразі) Якщо цей елемент має форму (регулярневираз функціярежиму прапор), і прапор не nil, то після виклику функціїрежиму суфікс, який співпав з регулярнимвираженіем, відкидається, і в списку проводиться повторний пошук іншого збігу

Ви можете вказати, який основний режим повинен використовуватися для редагування певного файлу, за допомогою тексту спеціального виду в першому непорожній рядку файлу У цьому рядку має зявитися імя режиму, до і після нього повинні стояти рядка

‘- * -. У цьому рядку також може зявитися інший текст Наприклад,

;-*-Lisp-*-

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

Інший формат визначення режиму:

– * Mode: імярежиму – * –

що дозволяє вам також задати локальні змінні, як тут:

– * Mode: імярежиму пер: значення .. – * –

Див Розділ 3125 [Змінні файлу], с 351, для отримання більшої інформації про це

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

Коли ви звертаєтеся до подібного файлу в Emacs, якщо імя файлу не задає основний режим, Emacs використовує для вибору режиму імя інтерпретатора в першому рядку Якщо перший рядок – це імя підтримуваної програми-інтерпретатора, такий як perl або tcl, Emacs використовує режим, відповідний для програм для цього інтерпретатора Мінлива interpreter-mode-alist задає відповідність між іменами программінтерпретаторов і основними режимами

Коли перша рядок починається з #’, Ви не можете (на багатьох системах) використовувати в ній – * -, оскільки при запуску інтерпретатора це ввело б в оману систему Тому в таких файлах Emacs шукає – * – на другому рядку, а не тільки на першій

Коли ви звертаєтеся до файлу, який не вказує, який основний режим використовувати, або коли ви створюєте новий буфер за допомогою Cx b, то використовуваним основним режимом є той, що визначений змінної default-major-mode Зазвичай її значення – це символ fundamental-mode, який задає режим Fudamental Якщо defaultmajor-mode дорівнює nil, то основний режим береться з раніше обраного буфера

Якщо ви змінили основний режим буфера, ви можете повернутися до того основному режиму, який Emacs вибрав би автоматично: використовуйте для цього команду Mx normal-mode Це та ж функція, яку викликає find-file для вибору основного режиму Вона також обробляє список локальних змінних файлу, якщо він є

Команди Cx Cw і set-visited-file-name перемикають в новий основний режим, якщо нове імя файлу увазі вибір режиму (див Розділ 143 [Збереження], с 108) Однак, це не відбувається, якщо вміст буфера задає основний режим і деякі спеціальні основні режими не допускають зміни режиму Ви можете вимкнути цю можливість перемикання режимів, встановивши change-major-mode-with-file-name в значення nil

20 Відступи

Ця глава описує команди Emacs, які створюють, прибирають або налаштовують відступи

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

C-j Виконати hRETi, За яким слід hTAB(newline-and-indent)

M-^ Злити два рядки (delete-indentation) Це скасовує дію C-j

CMo Розбити рядок в точці текст на рядку після крапки стає новим рядком з відступом до того стовпця, з якого він починається зараз (split-line)

Mm пересунути (вперед або назад) до першого Непорожнє знаку на поточному будів-

ке (back-to-indetation)

CM-\ Зробити відступ кількох рядків до одного і того ж стовпця (indent-region)

C-x hTABi     Жорстко зрушити блок рядків вліво або вправо (indent-rigidly)

Mi Зробити відступ від точки до наступного предопределенному колонки позиції табуляції (tab-to-tab-stop)

M-x indent-relative

Зробити відступ від точки до місця під точкою відступу в попередньому рядку

Більшість мов програмування мають деякий угоду по відступити Для Лісп-коду відступ рядків виконується згідно їх вкладеності в круглі дужки Та ж сама загальна ідея використовується для коду на Сі, хоча багато деталей відрізняються

У будь-якій мові для створення відступу у рядку використовується команда hTABi Кожен основний режим визначає цю команду так, щоб вона виконувала відповідний цій мові відступ У режимі Lisp hTABi  розставляє рядки відповідно до їх глибиною вкладеності в круглі дужки Незалежно від того, в якому місці рядка ви знаходитесь, коли набираєте hTABi, Вона вирівнює рядок цілком У режимі С, hTABi здійснює витончений і складний стиль відступу, який знає про багатьох аспектах синтаксису Сі

У режимі Text,hTABi  запускає команду tab-to-tab-stop, яка робить відступ до наступного колонки позиції табуляції Ви можете встановити позиції табуляції за допомогою Mx edit-tab-stops

201  Способи і команди відступу

Щоб пересунутися через відступ на рядку, зробіть Mm (back-to-indentation) Ця команда, дана де завгодно на рядку, поміщає точку на перший непорожній знак в цьому рядку

Щоб вставити рядок з відступом перед поточної рядком, зробіть Ca Co hTABi Що-

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

Якщо ви просто хочете вставити в буфер символ табуляції, то ви можете набрати Cq

hTABi

CMo (split-line) зрушує текст від точки до кінця рядка вертикально вниз, так що поточна рядок стає двома рядками CMo спочатку пересуває точку вперед через будь-яку кількість прогалин і знаків табуляції Потім вона вставляє після точки обмежувач рядка і достатня кількість відступів, щоб досягти того ж стовпця, на якому знаходиться точка Точка залишається перед вставляються перекладом рядка з цієї точки зору CMo нагадує Co

Щоб начисто зєднати два рядки, використовуйте команду M-^ (delete-indentation) Вона видаляє відступ на початку поточного рядка, а так само обмежувач рядка, замінюючи їх одиночним пропуском В особливому випадку (Корисному для коду на Ліспі) одиночний пробіл опускається, якщо сполучаються знаками є послідовні відкривають або закривають круглі дужки, або якщо після злиття йде ще одна нова рядок Щоб видалити просто відступ рядки, перейдіть на початок рядка і використовуйте M-\ (deletehorizontal-space), яка видаляє всі прогалини і табуляції близько курсору

Якщо є префікс заповнення, M-^ прибирає його, якщо він знаходиться після видаляється перекладу рядка Див Розділ 2153 [Префікс заповнення], с 187

Є також команди для зміни відступів кількох рядків відразу CM-\ (indent-region) застосовується для всіх рядків, які починаються в даній області вона робить для кожного з цих рядків звичайний відступ, як якщо б ви надрукували hTABi на початку рядка Числовий аргумент визначає стовпець для відступу, і кожен рядок зсувається вліво або вправо так, що її перший непорожній знак зявляється в цьому стовпці C-x hTAB(Indent-rigidly) cдвігает всі рядки в області вправо у відповідності зі своїм аргументом (вліво при негативному аргументі) Вся група рядків жорстко зсувається в одну сторону, саме тому ця команда отримала таке імя

Mx indent-relative виконує відступ точки, грунтуючись на попередньому рядку (фактично, за останньою непорожній рядку) Вона вставляє пропуск в точці, рухаючи точку доти, поки вона не стане під точкою відступу в попередньому рядку Точка відступу є кінцем послідовності прогалин або кінцем рядка Якщо точка знаходиться далі вправо, ніж будь-яка точка відступу в попередньому рядку, то все пробільні знаки перед точкою видаляються, і використовується перша застосовна тепер точка відступу Якщо навіть після цього немає придатної точки відступу, indent-relative запускає tab-to-tabstop (дивіться наступний розділ)

indent-relative – це визначення hTABв режимі Indented Text Див Глава 21 [Текст],

с 181

Див Розділ 21116 [Відступи в форматованому тексті], с 201, інший спосіб задати відступи для частини вашого тексту

202  Позиції табуляції

Для набору таблиць ви можете використовувати визначення hTABi  в режимі Text, tab-totab-stop Ця команда вставляє перед точкою відступ, достатній для того, щоб досягти наступного стовпця позиції табуляції Якщо ви знаходитесь не в режимі Text, цю функцію можна знайти по ключу M-i

Ви можете довільно встановити використовувані в Mi позиції табуляції Вони запамятовуються в змінної з імям tab-stop-list як список номерів стовпців у зростаючому порядку

Зручний спосіб встановити позиції табуляції – скористатися командою Mx edit-tab-stops, яка створює і вибирає буфер, що містить опис встановлених позицій табуляції Ви можете відредагувати цей буфер для визначення інших позицій табуляції і потім набрати Cc Cc, щоб зробити ці нові позиції табуляції діючими edit-tab-stops запамятовує, який буфер був поточним, коли ви запускали її, і записує позиції табуляції назад в цей буфер зазвичай все буфери поділяють одні й ті ж позиції табуляції, і зміна їх в одному буфері впливає на все, але якщо вам трапиться зробити tab-stop-list локальної в одному буфері, то edit-tabstops буде редагувати локальні установки

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

ляции через кожні вісім стовпців

:      :      :      :      :      :

0                1                2                3                4

0123456789012345678901234567890123456789012345678

To install changes,  type  C-c C-c

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

Зауважимо, що позиції табуляції, які управляють tab-to-tab-stop, не мають нічого спільного з показаними символами табуляції в буфері Див Розділ 117 [Змінні зображення], с 84, для більш докладної інформації на цей рахунок

203  Табуляція в порівнянні з пробілами

Зазвичай Emacs використовує для відступу рядків як табуляцію, так і прогалини Якщо ви захочете, то все відступи будуть робитися тільки за допомогою пробілів Щоб вимагати це, встановіть змінну indent-tab-mode рівний nil Це змінна буфера зміна її впливає тільки на поточний буфер, але є і значення за замовчуванням, яке ви теж можете змінити Див Розділ 3124 [Локальні змінні], с 350

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

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

*

*