Робота з файлами – ЧАСТИНА 9

‘{Імязчіпки} . Сама позначка не копіюється в ChangeLog. Наприклад, припустимо, що є такі журнальні записи:

Для vctexinfo: {expand} Fix expansion typos’

Для vcel: {expand} Dont call expand-file-name’

Для vc-hooksel: {expand} Dont call expand-file-name’

Тоді текст в ChangeLog виглядає так:

1999-04-01   Nathaniel Bowditch   &ltnat@apnorg&gt

* vctexinfo:  Fix  expansion  typos

* vcel, vc-hooksel:  Don’t  call expand-file-name

Журнальні записи, чий текст починається з #, чи не копіюються в ChangeLog. Наприклад, якщо ви просто поправили граматичні помилки в коментарях, ви можете зробити в журналі запис, що починається з #, Щоб у ChangeLog не заносилися настільки тривіальні речі

14782  Перейменування файлів під VC

Коли ви перейменовуєте зареєстрований файл, ви повинні перейменувати також відповідний майстер-файл, щоб отримати правильний результат Використовуйте vc-rename-file, щоб перейменувати вихідний файл, як ви вкажете, і відповідно його майстер-файл Це також оновить всі знімки (див Розділ 1477 [Знімки], с 126), які згадують даний файл, так що вони будуть використовувати нове імя незважаючи на це, змінений таким чином знімок може не працювати (див Розділ 14772 [Знімки Небезпечні місця], с 126)

Ви не можете використовувати vc-rename-file для файлу, який блокований кимось ще

14783  Вставка заголовків версій

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

Якщо ви користуєтеся RCS, і в ваших робочих файлах присутні заголовки версій, Emacs може використовувати їх для визначення поточної версії і стану блокування

цих файлів Це більш надійно, ніж звернення до майстер-файлам, яке робиться, якщо заголовків версій немає Зауважте, що в середовищі з декількома гілками заголовки версій необхідні для коректної роботи VC (див Розділ 14764 [Мультиплеєрні гілки], с 125)

Мінлива vc-consult-headers управляє пошуком заголовків версій Якщо вона відмінна від nil, Emacs проводить пошук заголовків, щоб дізнатися номер версії, яку ви редагуєте Установка цієї змінної в nil вимикає цей засіб

Для вставки підходящої рядки заголовка ви можете використовувати команду Cx vh

(vc-insert-headers)

Cx vh Вставляє у файл заголовки для використання з вашою системою управління версіями

Стоку заголовка за замовчуванням – це $ Id $ для RCS і % W% для SCCS Ви можете вказати інші вставляються заголовки, встановлюючи змінну vc-header-alist Її значення – це список елементів у формі (Програма Рядок), де програма – це RCS або SCCS, а рядок – це використовувана рядок

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

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

Кожен заголовок вставляється в точці на новому рядку, в оточенні знаків табуляції всередині обмежувачів коментаря Як правило, використовуються звичайні для поточного режиму рядка для початку і завершення коментаря, але в деяких режимах для цієї мети є особливі обмежувачі Комметаріі їх визначає змінна vc-comment-alist Кожен елемент у цьому списку має форму (режим початок кінець)

Мінлива vc-static-header-alist вказує, які ще рядки повинні додаватися в залежності від імені буфера Її значення має бути списком елементів у формі (regexp формат) Колиregexp відповідає імені буфера, як частина загловка вставляється формат Рядок загловка вставляється для кожного елемента, що збігається з імям буфера, і для кожного рядка, зазначеної в vc-header-alist Рядок загловка виходить шляхом форматування рядки з vc-header-alist з форматом, узятим з елемента vc-static-header-alist За замовчуванням vc-static-header-alist має таке значення:

((&quot\\c

‘{Ім’язчіпки} ‘. Сама позначка не копіюється в ‘ChangeLog’. Наприклад, припустимо, що є такі журнальні записи:

Для ‘vc.texinfo’: ‘{expand} Fix expansion typos.’

Для ‘vc.el’: ‘{expand} Don’t call expand-file-name.’

Для ‘vc-hooks.el’: ‘{expand} Don’t call expand-file-name.’

Тоді текст в ‘ChangeLog’ виглядає так:

1999-04-01   Nathaniel Bowditch   <nat@apn.org>

* vc.texinfo:  Fix  expansion  typos.

* vc.el, vc-hooks.el:  Don’t  call expand-file-name.

Журнальні записи, чий текст починається з ‘#’, чи не копіюються в ‘ChangeLog’. Наприклад, якщо ви просто поправили граматичні помилки в коментарях, ви можете зробити в журналі запис, що починається з ‘#’, Щоб у ‘ChangeLog “не заносилися настільки тривіальні речі.

14.7.8.2  Перейменування файлів під VC

Коли ви перейменовуєте зареєстрований файл, ви повинні перейменувати також відповідний майстер-файл, щоб отримати правильний результат. Використовуйте vc-rename-file, щоб перейменувати вихідний файл, як ви вкажете, і відповідно його майстер-файл. Це також оновить всі знімки (див. Розділ 14.7.7 [Знімки], с. 126), які згадують даний файл, так що вони будуть використовувати нове ім’я; незважаючи на це, змінений таким чином знімок може не працювати (див. Розділ 14.7.7.2 [Знімки Небезпечні місця], с. 126).

Ви не можете використовувати vc-rename-file для файлу, який блокований кимось ще.

14.7.8.3  Вставка заголовків версій

Іноді зручно поміщати рядка для ідентифікації версії прямо в робочі файли. Деякі особливі рядки, звані заголовками версії, замінюються в кожній версії на її номер.

Якщо ви користуєтеся RCS, і в ваших робочих файлах присутні заголовки версій, Emacs може використовувати їх для визначення поточної версії і стану блокування

цих файлів. Це більш надійно, ніж звернення до майстер-файлам, яке робиться, якщо заголовків версій немає. Зауважте, що в середовищі з декількома гілками заголовки версій необхідні для коректної роботи VC (див. Розділ 14.7.6.4 [Мультиплеєрні гілки], с. 125).

Мінлива vc-consult-headers управляє пошуком заголовків версій. Якщо вона відмінна від nil, Emacs проводить пошук заголовків, щоб дізнатися номер версії, яку ви редагуєте. Установка цієї змінної в nil вимикає цей засіб.

Для вставки підходящої рядки заголовка ви можете використовувати команду Cx vh

(vc-insert-headers).

Cx vh Вставляє у файл заголовки для використання з вашою системою управління версіями.

Стоку заголовка за замовчуванням – це ‘$ Id $’ для RCS і ‘% W%’ для SCCS. Ви можете вказати інші вставляються заголовки, встановлюючи змінну vc-header-alist. Її значення – це список елементів у формі (Програма. Рядок), де програма – це RCS або SCCS, а рядок – це використовувана рядок.

Замість одного рядка ви можете задати список рядків; тоді кожен рядок зі списку вставиться як окремий заголовок на окремому рядку.

Часто необхідно застосовувати “зайві” зворотні косі риси, коли ви пишете рядка для цієї змінної. Це потрібно для того, щоб такі рядку не інтерпретувалися в константах як заголовки версій, якщо сам файл на Emacs Lisp знаходиться під контролем системи управління версіями.

Кожен заголовок вставляється в точці на новому рядку, в оточенні знаків табуляції всередині обмежувачів коментаря. Як правило, використовуються звичайні для поточного режиму рядка для початку і завершення коментаря, але в деяких режимах для цієї мети є особливі обмежувачі Комметаріі; їх визначає змінна vc-comment-alist. Кожен елемент у цьому списку має форму (режим початок кінець).

Мінлива vc-static-header-alist вказує, які ще рядки повинні додаватися в залежності від імені буфера. Її значення має бути списком елементів у формі (regexp . формат). Колиregexp відповідає імені буфера, як частина загловка вставляється формат. Рядок загловка вставляється для кожного елемента, що збігається з ім’ям буфера, і для кожного рядка, зазначеної в vc-header-alist. Рядок загловка виходить шляхом форматування рядки з vc-header-alist з форматом, узятим з елемента vc-static-header-alist. За замовчуванням vc-static-header-alist має таке значення:

(("\\.c$" .

"\n#ifndef lint\nstatic char  vcid[] = \"\%s\";\n\

#endif /* lint */\n"))

Це визначає вставку тексту в такій формі:

#ifndef lint

static char vcid [] = “рядок”;

#endif /* lint */

Зауважте, що текст вище починається з порожнього рядка.

Якщо ви хочете використовувати у файлі більше одного заголовка версії, пишіть поруч. Механізм збереження міток в revert-buffer може не обробити мітки, розташовані між двома заголовками.

14.7.9  Налаштування VC

Є багато способів настройки VC. Параметри, які ви можете встановити, поділу-

ляють на чотири катагории, описані в наступних розділах.

14.7.9.1  Параметри для постпроцесора VC

Ви можете сказати RCS і CVS, чи повинні вони використовувати для файлу блокування або не повинні (див. Розділ 14.7.1.2 [Концепції VC], с. 117, для одержання опису блокування). VC автоматично розпізнає, що ви вибрали, і веде себе відповідно.

У RCS за замовчуванням застосовується блокування, але є режим, званий нестрогим блокуванням, в якому ви можете фіксувати зміни без попереднього блокування файлу. Використовуйте ‘rcs-U’ для перемикання до нестрогому блокування для деякого файлу, подробиці дивіться в документі Man ‘rcs’.

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

З одного боку, ви можете встановити змінну середовища CVSREAD в довільне значення. Якщо ця змінна визначена, CVS робить ваші робочі файли доступними тільки для читання за замовчуванням. У Emacs ви повинні набрати Cx Cq, щоб зробити файл доступним для запису, так що редагування робочих файлів фактично схоже на редагування із застосуванням блокування. Зауважте однак, що фактично блокування не відбувається, тому кілька користувачів можуть одночасно зробити свої робочі файли записуваними. Коли ви встановлюєте CVSREAD перший раз, обов’язково заново вийміть всі ваші модулі, щоб захист файлів була правильно виставлена.

Інший спосіб досягти чогось схожого на блокування – скористатися засобом спостереження в CVS. Якщо над файлом встановлено спостереження, CVS за замовчуванням робить його доступним тільки для читання, і ви також повинні використовувати в Emacs Cx Cq, щоб зробити його записуваним. Щоб зробити файл доступним для запису, VC викликає cvs edit, і CVS піклується про те, щоб інші розробники були оповіщені про ваш намір змінити цей файл. Подробиці про використання засоби спостереження дивіться в документації по CVS.

Ви можете придушити використання VC для файлів, керованих CVS, встановивши змінну vc-handle-cvs в nil. Якщо ви зробите так, Emacs вважає ці файли незарегістрітованнимі, і команди VC стають в них недоступними. Тоді ви повинні робити всі операції CVS вручну.

14.7.9.2  Керування робочими файлів в VC

Зазвичай Emacs не зберігаються резервні копії для вихідних файлів, які знаходяться під контролем системи управління версіями. Якщо ви хочете робити резервні копії навіть для таких файлів, встановіть змінну vc-make-backup-files в відмінне від nil значення.

Як правило робочі файли існують завжди, блоковані вони чи ні. Якщо ви встановите vc-keep-workfiles в nil, то при фіксуванні нової версії за допомогою Cx Cq робочий файл буде віддалятися; але будь-яка спроба звернутися до цього файлу з Emacs створить його знову. (Під CVS робочі файли залишаються завжди.)

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

Мінлива vc-follow-symlinks каже, що потрібно робити, коли символьне посилання вказує на файл з керуванням версіями. Якщо вона дорівнює nil, VC лише показує попереджувальне повідомлення. Якщо це t, VC автоматично слід за посиланням і звертається до теперішнього файлу, повідомляючи вам про це в луна-області. Якщо це значення дорівнює ask (за замовчуванням), VC щоразу запитує вас, чи потрібно пройти по посиланням.

14.7.9.3  Як VC дізнається статус файлу

При обчисленні статусу блокування файлу, VC спочатку шукає в ньому рядок заголовка версії RCS (див. Розділ 14.7.8.3 [Заголовки версії], с. 128). Якщо рядки заголовка немає, або якщо ви користуєтеся SCCS, VC зазвичай дивиться на дозволи, встановлені для робочого файлу; це швидко. Але можуть бути ситуації, коли дозволами не можна довіряти. У такому випадку робиться звернення до майстер-файлу, що досить дорого. Крім того, майстер-файл може тільки сказати, чи заблокований файл кимось, але не те, що ваш робочий файл містить саме цю блоковану версію.

Ви можете вказати VC не використовувати заголовки версії для визначення статусу блокування, встановивши vc-consult-headers в nil. Тоді VC завжди використовує для цього біти дозволів для файлу (якщо вона може їм довіряти) або перевіряє майстер-файл.

Ви можете задати критерій, за яким слід довіряти дозволами для файлу, за допомогою змінної vc-mistrust-permissions. Її значенням може бути t (ніколи не довіряти бітам дозволів і завжди перевіряти майстер-файл), nil (завжди довіряти дозволами) або функція з одним аргументом, яка приймає рішення. Аргумент

– Це ім’я підкаталогу ‘RCS’, ‘CVS’ або ‘SCCS’. Відмінне від nil значення з цієї функції говорить, що бітам дозволів довіряти не можна. Якщо ви виявили, що дозволи для робочого файлу вистановлени помилково, встановіть vc-mistrust-permissions в t. Тоді VC завжди перевірятиме майстер-файл для визначення статусу файлу.

14.7.9.4  Виконання команд в VC

Якщо vc-suppress-confirm відмінна від nil, то Cx Cq і Cx vi можуть зберігати поточний буфер без запиту, і Cx vu також працює без підтвердження. (Ця змінна не впливає на Cx vc; дана операція наскільки значна, що для неї завжди треба питати підтвердження.)

Режим VC робить велику частину роботи, запускаючи команди оболонки для RCS, CVS і SCCS. Якщо vc-command-messages відмінна від nil, VC виводить повідомлення, що показують, які команди оболонки запускаються, і додаткові повідомлення, коли команда завершується.

Ви можете задати додаткові каталоги для пошуку програм управління версіями, встановлюючи змінну vc-path. Ці каталоги проглядаються перед звичайним шляхом пошуку. Але зазвичай правильні файли знаходяться автоматично.

14.8  Каталоги файлів

Файлова система групує файли по каталогах. Роздруківка каталогу – це список всіх файлів в каталозі. Emacs надає команди для створення та вилучення каталогів і для видачі роздруківки каталогів в короткому форматі (тільки імена файлів) і в докладному форматі (що включає розміри, дати і авторів). Є також броузер каталогів, званий Dired; дивіться Глава 28 [Dired], с. 291.

C-x C-d катабозразок hRETi

Виводить коротку роздруківку каталогу (list-directory).

C-u C-x C-d катабозразок hRETi

Виводить детальну роздруківку каталогу.

M-x make-directory hRETім’якат hRETi

Створює новий каталог з ім’ям ім’якат.

M-x delete-directory hRETім’якат hRETi

Видаляє каталог з ім’ям ім’якат. Він повинен бути порожній, інакше ви отримаєте помилку.

Команда для виведення роздруківки каталогу – це Cx Cd (list-directory). Вона зчитує, використовуючи мінібуфер, ім’я файлу, який є або каталогом, який потрібно роздрукувати, або шаблоном імен файлів, які потрібно перерахувати. Наприклад,

C-x C-d /u2/emacs/etc hRETi

перераховує всі файли в каталозі ‘/ u2/emacs/etc’. Ось приклад опису зразка імен файлів:

C-x C-d /u2/emacs/src/*.c hRETi

Зазвичай Cx Cd друкує короткий перелік каталогу, який містить лише імена файлів. Числовий аргумент (незалежно від значення) велить показувати детальну роздруківку (як ‘ls-l’).

Текст роздруківки каталогу виходить від ls, запущеної в підлеглому процесі. Дві змінні Emacs управляють ключами, переданими ls: list-directory-briefswitches – це рядок, що дає ключі для використання в коротких роздруківках (“-CF” за замовчуванням), і list-directory-verbose-switches – ключі для докладної роздруківки (“-l” за замовчуванням).

14.9  Порівняння файлів

Команда Mx diff порівнює два файли, показуючи відмінності в буфері Emacs з ім’ям

‘* Diff *’. Вона запускає програму diff, використовуючи ключі, одержувані з змінної

diff-switches, чиє значення має бути рядком.

Буфер ‘* Diff *’ має в якості основного режим Compilation, тому ви можете використовувати Cx ‘, щоб послідовно звернутися до змінених місцях в двох вихідних файлах. Ви також можете перейти до конкретного скибці змін і натиснути hRETi  або Cc Cc, або клацнути на ньому Mouse-2, щоб перейти до відповідної позиції в початковому тексті. Ви також можете використовувати інші особливі команди режиму Compilation:hSPCi  і hDELi  для прокрутки і Mp і Mn для пересування курсору. Див Розділ 23.1 [Компіляція], с. 247.

Команда Mx diff-backup порівнює заданий файл з його самої останньої резервної копією. Якщо ви задали ім’я резервного файлу, diff-backup порівнює його з вихідним файлом.

Команда Mx compare-windows порівнює текст у поточному вікні з текстом наступного вікна. Порівняння починається від точки в кожному вікні, і обидві початкові позиції втискуються в список позначок відповідного буфера. Потім точка переміщається в кожному вікні вперед по одному знаку, поки не буде знайдено розбіжність. Тоді ця команда зупиняється. Для отримання більшої інформації про вікна в Emacs дивіться Глава 16 [Вікна], с. 141.

З числовим аргументом, compare-windows ігнорує зміни в пропусках. Якщо змінна compare-ignore-case НЕ nil, вона ігнорує також і відмінності в регістрі букв.

Дивіться також Розділ 22.14 [Emerge], с. 231, опис зручних засобів для злиття двох схожих файлів.

14.10  Різноманітні дії над файлами

У Emacs є команди для твори багатьох інших операцій над файлами. Всі вони діють на один файл; вони не сприймають імена файлів з шаблонами.

Mx view-file дозволяє вам переглянути або прочитати файл цілим екранам. Вона зчитує ім’я файлу, використовуючи мінібуфер. Після завантаження файлу в буфер Emacs, viewfile показує його початок. Тепер ви можете натиснути hSPCi, Щоб прокрутити вперед на

ціле вікно, або hDELдля прокрутки назад. Надаються й інші різні команди для переміщення по файлу, але не для його зміни; наберіть під час перегляду?, щоб отримати їх перелік. Це практично ті ж звичайні команди Emacs для пересування курсору. Щоб вийти з перегляду, наберіть q. Команди перегляду визначаються особливим основним режимом, званому режимом View.

Є споріднена команда, Mx view-buffer, для перегляду буфера, вже існую-

ного в Emacs. Див Розділ 15.3 [Буфери Різне], с. 136.

Mx insert-file вставляє копію вмісту заданого файлу в поточний буфер в позиції точки, залишаючи точку незмінною перед вставленим і мітку після нього.

Mx write-region – це звернення Mx insert-file; вона копіює вміст області у вказаний файл. Mx append-to-file додає текст області в кінець заданого файлу. Див Розділ 9.3 [Накопичення тексту], с. 73.

Mx delete-file видаляє вказаний файл, як команда оболонки rm. Якщо ви хочете видалити багато файлів в одному каталозі, може виявитися зручніше скористатися Dired (див. Глава 28 [Dired], с. 291).

Mx rename-file зчитує, використовуючи мінібуфер, два імені файлу, старий і новий, а потім переіменоивает файл старий в новий. Якщо файл з ім’ям новий вже існує, ви повинні підтвердити перейменування введенням yes, або перейменування не проводиться; це зроблено, тому що таке перейменування призведе до втрати старого значення імені новий. Якщо старий і новий знаходяться на різних файлових системах, файл старий копіюється і віддаляється.

Схожа команда Mx add-name-to-file використовується для додавання ще одного імені існуючого файлу без видалення старого імені. Нове ім’я зобов’язане прінадлежять тієї ж файлової системі, де знаходиться сам файл.

Mx copy-file зчитує файл старий і записує новий файл з ім’ям новий з тим же вмістом. Якщо файл з ім’ям новий вже існує, потрібне підтвердження, тому що копіювання затирає старе вміст файлу новий.

Mx make-symbolic-link зчитує два імені файлу, мета та ім’япосилання, а потім створює символьне посилання з ім’ям ім’япосилання, що вказує на ціль. Це проявиться в тому, що майбутні спроби відкрити файл ім’япосилання отримають той файл, який називається мета під час відкриття, або отримають помилку, якщо ім’я мета в цей час не використовується. Ця команда не розкриває аргумент мета, тому вона дозволяє вам вказати відносне ім’я в якості файлу призначення посилання.

Якщо ім’япосилання зайнято, потрібне підтвердження. Зверніть увагу, не всі системи підтримують символьні посилання.

14.11  Доступ до стисненим файлів

Emacs поставляється з бібліотекою, яка автоматично розпаковує стислі файли, коли ви до них звертаєтесь, і автоматично стискає їх знову, якщо ви їх змінили і зберігаєте. Щоб задіяти цю можливість, наберіть команду Mx auto-compression-mode.

Коли включено автоматичне стиснення (що передбачає і автоматичну распа-

ковку), Emacs розпізнає стислі файли по іменах. Імена файлів, що завершуються на

‘. Gz’, вказують, що цей файл стиснутий програмою gzip. Інші закінчення позначають інші методи стиснення.

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

14.12  Видалені файли

Ви можете послатися на файли на інших машинах, використовуючи особливий синтаксис імен:

/ Машина: ім’яфайлу

/ Користувач @ машина: ім’яфайлу

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

Зазвичай, якщо ви не задали ім’я користувача в імені віддаленого файлу, це означає, що потрібно використовувати ваше власне користувача ім’я. Але якщо ви встановите змінну ange-ftp-default-user рівній якийсь рядку, то буде використовуватися цей рядок. (Пакет Emacs, який реалізує доступ до файлів по FTP, називається ange-ftp.)

Ви можете повністю вимкнути обробку імен FTP-файлів, встановивши змінну

file-name-handler-alist в значення nil.

14.13  Буквальні імена файлів

Ви можете скасувати особливий сенс абсолютного імені файлу, щоб блокувати дей-

ствие спеціальних символів і синтаксису. Це можна зробити, додавши ‘/:’ на початку.

Наприклад, ви можете скасувати особливий сенс імені локального файлу, який виглядає як віддалений, щоб запобігти його трактування як імені віддаленого файлу. Таким чином, якщо у вас є каталог з ім’ям ‘/ foo:’ і в ньому файл з ім’ям ‘bar’, ви можете послатися в Emacs на цей файл як на ‘/ :/ foo :/ bar’.

‘/:’ Також може запобігти розуміння ‘~’ як спеціального символу, що позначає початковий каталог цього користувача. Наприклад, ‘/ :/ tmp / ~ hack’ посилається на файл з ім’ям ‘~ hack’ в каталозі ‘/ tmp’.

Аналогічно, використання ‘/:’ – це один із способів ввести в мінібуфер ім’я файлу, що містить ‘$’. Однак, ‘/:’ зобов’язана бути на початку цього буфера, щоб блокувати ефект ‘$’.

За допомогою ‘/:’ ви також можете придушити ефект символів підстановки при зверненні до файлів. Наприклад, ‘/ :/ tmp / foo * bar’ звертається до файлу ‘/ tmp / foo * bar’. Однак, частіше за все ви просто можете ввести символи підстановки як є. Наприклад, якщо єдине ім’я файлу в ‘/ tmp’, яке починається на ‘foo’ і завершується на ‘bar’ – це

‘Foo * bar’, то вказавши ‘/ tmp / foo * bar’ ви звернетеся тільки до ‘/ tmp / foo * bar’.

Джерело: Річард Столмен, Керівництво по GNU Emacs

quot

&quot\n#ifndef lint\nstatic char  vcid[] = \&quot\%s\"\n\

#endif /* lint */\n&quot))

Це визначає вставку тексту в такій формі:

#ifndef lint

static char vcid [] = рядок;

#endif /* lint */

Зауважте, що текст вище починається з порожнього рядка

Якщо ви хочете використовувати у файлі більше одного заголовка версії, пишіть поруч Механізм збереження міток в revert-buffer може не обробити мітки, розташовані між двома заголовками

1479  Налаштування VC

Є багато способів настройки VC Параметри, які ви можете встановити, поділу-

ляють на чотири катагории, описані в наступних розділах

14791  Параметри для постпроцесора VC

Ви можете сказати RCS і CVS, чи повинні вони використовувати для файлу блокування або не повинні (див Розділ 14712 [Концепції VC], с 117, для одержання опису блокування) VC автоматично розпізнає, що ви вибрали, і веде себе відповідно

У RCS за замовчуванням застосовується блокування, але є режим, званий нестрогим блокуванням, в якому ви можете фіксувати зміни без попереднього блокування файлу Використовуйте rcs-U для перемикання до нестрогому блокування для деякого файлу, подробиці дивіться в документі Man rcs.

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

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

Інший спосіб досягти чогось схожого на блокування – скористатися засобом спостереження в CVS Якщо над файлом встановлено спостереження, CVS за замовчуванням робить його доступним тільки для читання, і ви також повинні використовувати в Emacs Cx Cq, щоб зробити його записуваним Щоб зробити файл доступним для запису, VC викликає cvs edit, і CVS піклується про те, щоб інші розробники були оповіщені про ваш намір змінити цей файл Подробиці про використання засоби спостереження дивіться в документації по CVS

Ви можете придушити використання VC для файлів, керованих CVS, встановивши змінну vc-handle-cvs в nil Якщо ви зробите так, Emacs вважає ці файли незарегістрітованнимі, і команди VC стають в них недоступними Тоді ви повинні робити всі операції CVS вручну

14792  Керування робочими файлів в VC

Зазвичай Emacs не зберігаються резервні копії для вихідних файлів, які знаходяться під контролем системи управління версіями Якщо ви хочете робити резервні копії навіть для таких файлів, встановіть змінну vc-make-backup-files в відмінне від nil значення

Як правило робочі файли існують завжди, блоковані вони чи ні Якщо ви встановите vc-keep-workfiles в nil, то при фіксуванні нової версії за допомогою Cx Cq робочий файл буде віддалятися але будь-яка спроба звернутися до цього файлу з Emacs створить його знову (Під CVS робочі файли залишаються завжди)

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

Мінлива vc-follow-symlinks каже, що потрібно робити, коли символьне посилання вказує на файл з керуванням версіями Якщо вона дорівнює nil, VC лише показує попереджувальне повідомлення Якщо це t, VC автоматично слід за посиланням і звертається до теперішнього файлу, повідомляючи вам про це в луна-області Якщо це значення дорівнює ask (за замовчуванням), VC щоразу запитує вас, чи потрібно пройти по посиланням

14793  Як VC дізнається статус файлу

При обчисленні статусу блокування файлу, VC спочатку шукає в ньому рядок заголовка версії RCS (див Розділ 14783 [Заголовки версії], с 128) Якщо рядки заголовка немає, або якщо ви користуєтеся SCCS, VC зазвичай дивиться на дозволи, встановлені для робочого файлу це швидко Але можуть бути ситуації, коли дозволами не можна довіряти У такому випадку робиться звернення до майстер-файлу, що досить дорого Крім того, майстер-файл може тільки сказати, чи заблокований файл кимось, але не те, що ваш робочий файл містить саме цю блоковану версію

Ви можете вказати VC не використовувати заголовки версії для визначення статусу блокування, встановивши vc-consult-headers в nil Тоді VC завжди використовує для цього біти дозволів для файлу (якщо вона може їм довіряти) або перевіряє майстер-файл

Ви можете задати критерій, за яким слід довіряти дозволами для файлу, за допомогою змінної vc-mistrust-permissions Її значенням може бути t (ніколи не довіряти бітам дозволів і завжди перевіряти майстер-файл), nil (завжди довіряти дозволами) або функція з одним аргументом, яка приймає рішення Аргумент

– Це імя підкаталогу RCS, CVS або SCCS. Відмінне від nil значення з цієї функції говорить, що бітам дозволів довіряти не можна Якщо ви виявили, що дозволи для робочого файлу вистановлени помилково, встановіть vc-mistrust-permissions в t Тоді VC завжди перевірятиме майстер-файл для визначення статусу файлу

14794  Виконання команд в VC

Якщо vc-suppress-confirm відмінна від nil, то Cx Cq і Cx vi можуть зберігати поточний буфер без запиту, і Cx vu також працює без підтвердження (Ця змінна не впливає на Cx vc дана операція наскільки значна, що для неї завжди треба питати підтвердження)

Режим VC робить велику частину роботи, запускаючи команди оболонки для RCS, CVS і SCCS Якщо vc-command-messages відмінна від nil, VC виводить повідомлення, що показують, які команди оболонки запускаються, і додаткові повідомлення, коли команда завершується

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

148  Каталоги файлів

Файлова система групує файли по каталогах Роздруківка каталогу – це список всіх файлів в каталозі Emacs надає команди для створення та вилучення каталогів і для видачі роздруківки каталогів в короткому форматі (тільки імена файлів) і в докладному форматі (що включає розміри, дати і авторів) Є також броузер каталогів, званий Dired дивіться Глава 28 [Dired], с 291

C-x C-d катабозразок hRETi

Виводить коротку роздруківку каталогу (list-directory)

C-u C-x C-d катабозразок hRETi

Виводить детальну роздруківку каталогу

M-x make-directory hRETімякат hRETi

Створює новий каталог з імям імякат

M-x delete-directory hRETімякат hRETi

Видаляє каталог з імям імякат Він повинен бути порожній, інакше ви отримаєте помилку

Команда для виведення роздруківки каталогу – це Cx Cd (list-directory) Вона зчитує, використовуючи мінібуфер, імя файлу, який є або каталогом, який потрібно роздрукувати, або шаблоном імен файлів, які потрібно перерахувати Наприклад,

C-x C-d /u2/emacs/etc hRETi

перераховує всі файли в каталозі / u2/emacs/etc. Ось приклад опису зразка імен файлів:

C-x C-d /u2/emacs/src/*c hRETi

Зазвичай Cx Cd друкує короткий перелік каталогу, який містить лише імена файлів Числовий аргумент (незалежно від значення) велить показувати детальну роздруківку (як ls-l)

Текст роздруківки каталогу виходить від ls, запущеної в підлеглому процесі Дві змінні Emacs управляють ключами, переданими ls: list-directory-briefswitches – це рядок, що дає ключі для використання в коротких роздруківках (-CF за замовчуванням), і list-directory-verbose-switches – ключі для докладної роздруківки (-l за замовчуванням)

149  Порівняння файлів

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

‘* Diff *. Вона запускає програму diff, використовуючи ключі, одержувані з змінної

diff-switches, чиє значення має бути рядком

Буфер * Diff * має в якості основного режим Compilation, тому ви можете використовувати Cx , щоб послідовно звернутися до змінених місцях в двох вихідних файлах Ви також можете перейти до конкретного скибці змін і натиснути hRETi  або Cc Cc, або клацнути на ньому Mouse-2, щоб перейти до відповідної позиції в початковому тексті Ви також можете використовувати інші особливі команди режиму Compilation:hSPCi  і hDELi  для прокрутки і Mp і Mn для пересування курсору Див Розділ 231 [Компіляція], с 247

Команда Mx diff-backup порівнює заданий файл з його самої останньої резервної копією Якщо ви задали імя резервного файлу, diff-backup порівнює його з вихідним файлом

Команда Mx compare-windows порівнює текст у поточному вікні з текстом наступного вікна Порівняння починається від точки в кожному вікні, і обидві початкові позиції втискуються в список позначок відповідного буфера Потім точка переміщається в кожному вікні вперед по одному знаку, поки не буде знайдено розбіжність Тоді ця команда зупиняється Для отримання більшої інформації про вікна в Emacs дивіться Глава 16 [Вікна], с 141

З числовим аргументом, compare-windows ігнорує зміни в пропусках Якщо змінна compare-ignore-case НЕ nil, вона ігнорує також і відмінності в регістрі букв

Дивіться також Розділ 2214 [Emerge], с 231, опис зручних засобів для злиття двох схожих файлів

1410  Різноманітні дії над файлами

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

Mx view-file дозволяє вам переглянути або прочитати файл цілим екранам Вона зчитує імя файлу, використовуючи мінібуфер Після завантаження файлу в буфер Emacs, viewfile показує його початок Тепер ви можете натиснути hSPCi, Щоб прокрутити вперед на

ціле вікно, або hDELдля прокрутки назад Надаються й інші різні команди для переміщення по файлу, але не для його зміни наберіть під час перегляду, щоб отримати їх перелік Це практично ті ж звичайні команди Emacs для пересування курсору Щоб вийти з перегляду, наберіть q Команди перегляду визначаються особливим основним режимом, званому режимом View

Є споріднена команда, Mx view-buffer, для перегляду буфера, вже існую-

ного в Emacs Див Розділ 153 [Буфери Різне], с 136

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

Mx write-region – це звернення Mx insert-file вона копіює вміст області у вказаний файл Mx append-to-file додає текст області в кінець заданого файлу Див Розділ 93 [Накопичення тексту], с 73

Mx delete-file видаляє вказаний файл, як команда оболонки rm Якщо ви хочете видалити багато файлів в одному каталозі, може виявитися зручніше скористатися Dired (див Глава 28 [Dired], с 291)

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

Схожа команда Mx add-name-to-file використовується для додавання ще одного імені існуючого файлу без видалення старого імені Нове імя зобовязане прінадлежять тієї ж файлової системі, де знаходиться сам файл

Mx copy-file зчитує файл старий і записує новий файл з імям новий з тим же вмістом Якщо файл з імям новий вже існує, потрібне підтвердження, тому що копіювання затирає старе вміст файлу новий

Mx make-symbolic-link зчитує два імені файлу, мета та імяпосилання, а потім створює символьне посилання з імям імяпосилання, що вказує на ціль Це проявиться в тому, що майбутні спроби відкрити файл імяпосилання отримають той файл, який називається мета під час відкриття, або отримають помилку, якщо імя мета в цей час не використовується Ця команда не розкриває аргумент мета, тому вона дозволяє вам вказати відносне імя в якості файлу призначення посилання

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

1411  Доступ до стисненим файлів

Emacs поставляється з бібліотекою, яка автоматично розпаковує стислі файли, коли ви до них звертаєтесь, і автоматично стискає їх знову, якщо ви їх змінили і зберігаєте Щоб задіяти цю можливість, наберіть команду Mx auto-compression-mode

Коли включено автоматичне стиснення (що передбачає і автоматичну распа-

ковку), Emacs розпізнає стислі файли по іменах Імена файлів, що завершуються на

‘. Gz, вказують, що цей файл стиснутий програмою gzip Інші закінчення позначають інші методи стиснення

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

1412  Видалені файли

Ви можете послатися на файли на інших машинах, використовуючи особливий синтаксис імен:

/ Машина: імяфайлу

/ Користувач @ машина: імяфайлу

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

Зазвичай, якщо ви не задали імя користувача в імені віддаленого файлу, це означає, що потрібно використовувати ваше власне користувача імя Але якщо ви встановите змінну ange-ftp-default-user рівній якийсь рядку, то буде використовуватися цей рядок (Пакет Emacs, який реалізує доступ до файлів по FTP, називається ange-ftp)

Ви можете повністю вимкнути обробку імен FTP-файлів, встановивши змінну

file-name-handler-alist в значення nil

1413  Буквальні імена файлів

Ви можете скасувати особливий сенс абсолютного імені файлу, щоб блокувати дей-

ствие спеціальних символів і синтаксису Це можна зробити, додавши /: на початку

Наприклад, ви можете скасувати особливий сенс імені локального файлу, який виглядає як віддалений, щоб запобігти його трактування як імені віддаленого файлу Таким чином, якщо у вас є каталог з імям / foo: і в ньому файл з імям bar, ви можете послатися в Emacs на цей файл як на / :/ foo :/ bar.

‘/: Також може запобігти розуміння ~ як спеціального символу, що позначає початковий каталог цього користувача Наприклад, / :/ tmp / ~ hack посилається на файл з імям ~ hack в каталозі / tmp.

Аналогічно, використання /: – це один із способів ввести в мінібуфер імя файлу, що містить $. Однак, /: зобовязана бути на початку цього буфера, щоб блокувати ефект $.

За допомогою /: ви також можете придушити ефект символів підстановки при зверненні до файлів Наприклад, / :/ tmp / foo * bar звертається до файлу / tmp / foo * bar. Однак, частіше за все ви просто можете ввести символи підстановки як є Наприклад, якщо єдине імя файлу в / tmp, яке починається на foo і завершується на bar – це

‘Foo * bar, то вказавши / tmp / foo * bar ви звернетеся тільки до / tmp / foo * bar.

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

*

*