Різноманітні команди – ЧАСТИНА 10

3124  Локальні змінні

M-x make-local-variable hRETпер hRETi

Зробити змінну пров локальної в поточному буфері

M-x kill-local-variable hRETпер hRETi

Зробити так, що змінна пров використовувала в поточному буфері своє глобаль-

ве значення

M-x make-variable-buffer-local hRETпер hRETi

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

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

Команда Mx make-local-variable зчитує імя змінної і робить її локальної для даного буфера Майбутні зміни в даному буфері не торкнуться інші буфери, а майбутні зміни глобального значення не торкнуться значення для даного буфера

Mx make-variable-buffer-local зчитує імя змінної і змінює майбутнє її поведінку таким чином, що при установці вона автоматично стає локальною Точніше, якщо змінна позначається таким способом, то звичайні способи установки змінної спочатку будуть автоматично виконувати make-local-variable Такі змінні ми називаємо змінними буфера

Основні режими (див Глава 19 [Основні режими], с 175) завжди роблять змінні локальними для буфера до їх установки Тому зміна основного режиму в одному

буфері не впливає на інші буфери Другорядні режими також працюють шляхом установки змінних – зазвичай кожен другорядний режим має одну керуючу змінну, яка відмінна від nil, коли даний режим включений (див Розділ 311 [Другорядні режими], с 341) Для більшості другорядних режимів керуюча змінна є змінною буфера

Emacs містить деяку кількість змінних, які завжди є змінними буфера Сюди включаються abbrev-mode, auto-fill-function, case-fold-search, comment-column, ctl-arrow, fill-column, fill-prefix, indent-tabs-mode, left-margin, mode-line-format, overwrite-mode, selective-display-ellipses, selective-display, tab-width і truncate-lines Деякі інші змінні також завжди є локальними для поточного буфера, але вони використовуються для внутрішніх цілей

Деякі змінні не можуть бути локальними для буфера, тому що вони замість цього завжди локальні для кожного дисплея (див Розділ 178 [Безліч дисплеїв], с 152) Якщо ви спробуєте зробити яку-небудь з цих змінних локальної для буфера, то ви отримаєте повідомлення про помилку

Команда Mx kill-local-variable зчитує з мінібуфера імя змінної і припиняє її існування як локальної для поточного буфера З цього моменту в цьому буфері починає діяти глобальне значення змінної Установка основного режиму знищує всі локальні змінні буфера за винятком кількох, спеціально позначених постійно локальні

Для установки глобального значення змінної, незалежно від того, чи має вона локальне значення в поточному буфері, можна використовувати функцію Лиспа setq-default Вона працює аналогічно setq, але встановлює глобальні значення змінних, а не локальні (якщо вони є) Якщо в поточному буфері дійсно існує локальне значення, то нове глобальне значення може бути невидимо доти, поки ви не перемкніться в іншій буфер Ось приклад:

(setq-default fill-column  75)

setq-default – це єдиний спосіб установки глобального значення змінної,

яка була позначена функцією make-variable-buffer-local

Програми на Ліспі можуть подивитися на значення деякої змінної за замовчуванням за допомогою функції default-value Ця функція приймає як аргумент символ і повертає його значення за замовчуванням Аргумент обчислюється зазвичай ви повинні явно поставити перед ним лапки Наприклад, ось як можна отримати значення за замовчуванням для змінної fill-column:

(default-value ’fill-column)

3125  Локальні змінні в файлах

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

Є два способи вказівки локальних змінних: в першому рядку або за допомогою списку локальних змінних Тут ми покажемо, як задати змінні в першому рядку:

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

Таким способом ви можете написати будь-яку кількість пар змінна / значення, кожна пара розділяється двокрапкою і крапкою з комою, як показано вище mode: імярежиму задає основний режим ця пара повинна бути першою в рядку Значення не обчислюються, а використовуються буквально Ось приклад, який задає режим Lisp і встановлює дві змінні з числовими значеннями:

;; -*-mode:  Lisp fill-column:  75  comment-column: 50  -*-

Цим способом ви можете також вказати систему кодування для даного файлу: просто задайте значення для змінної з імям coding Значним має бути імя системи кодування, яке Emacs може розпізнати Див Розділ 187 [Системи кодування], с 165

Список локальних змінних знаходиться в кінці файлу, на останній сторінці (Часто буває найкраще помістити його на окрему сторінку) Список локальних змінних починається з рядка, що містить Local Variables: , і закінчується рядком, що містить End: . Між ними йдуть імена змінних та їх значення, по одному на рядку, у вигляді змінна: значення. Значення не обчислюються, вони використовуються буквально Якщо у файлі використовуються і список локальних змінних, і рядок – * -, то Emacs обробляє спочатку все в рядку – * -, а потім все в списку локальних змінних

Ось приклад списку локальних змінних:

;;; Local  Variables: ***

;;; mode:lisp ***

;;; comment-column:0 ***

;;; comment-start:  ";; &quot  ***

;;; comment-end:&quot***&quot  ***

;;; End: ***

Як ви бачите, кожен рядок починається з префікса ;;; І закінчується суфіксом

‘***. Emacs розпізнає їх як префікс і суфікс, грунтуючись на першому рядку списку, так як вони оточують магічну рядок Local Variables:; потім вони автоматично виключаються з інших рядків списку

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

‘І закінчується на *** ; значення локальних змінних comment-start і comment-end налаштовують Emacs на розуміння цього незвичайного синтаксису Не використовуйте префікс або суфікс, якщо вони вам не потрібні

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

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

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

– Це справа особистого смаку, а не властивість вмісту файлу Якщо ви хочете використовувати режим Auto Fill, то встановіть пастки основних режимів у вашому файлі . Emacs, щоб він включався (коли потрібно) тільки для вас (див Розділ 317 [Файл ініціалізації], с 366) Не використовуйте список локальних змінних для навязування вашого смаку всім іншим

Список локальних змінних повинен починатися не далі, ніж за 3000 знаків від кінця файлу, і він має перебувати на останній сторінці, якщо файл поділений на сторінки Інакше Emacs не помітить його там Мета цього в тому, щоб випадкова Local Variable:,

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

Використовуйте команду normal-mode для переустановлення локальних змінних і основного режиму даного буфера відповідно імені файлу і його вмісту, включаючи списки локальних змінних, якщо вони є Див Розділ 191 [Вибір режиму], с 175

Мінлива enable-local-variables каже, чи потрібно обробляти локальні змінні в файлах, і таким чином дає вам шанс перекрити їх За умовчанням її значення дорівнює t, що означає обробку локальних змінних в файлах Якщо ви встановите значення змінної рівним nil, то Emacs просто ігноруватиме локальні змінні в файлах Будь-яке інше значення велить робити запит у користувача про кожен файл, в якому є локальні змінні, показуючи визначення локальних змінних, щоб ви могли прийняти рішення

“Змінна eval і деякі справжні змінні створюють якийсь ризик коли ви звертаєтеся до чужих файлів, визначення локальних змінних для них можуть довільно впливати на ваш Emacs Тому параметр enable-local-eval контролює, чи буде Emacs обробляти змінні eval, а так само змінні, чиї імена закінчуються на -hook, -hooks, -function або -functions, а також деякі інші змінні Існує три можливих значення для даного параметра: t, nil і що-небудь інше, точно так само, як і для enable-local-variables Налаштування за замовчуванням maybe, це не t і не nil, так що зазвичай Emacs запитає підтвердження про встановлення цих змінних

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

*

*