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

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

Перше, що ви повинні зробити, коли прийшло повідомлення про одночасне редагуванні, – роздрукувати каталог за допомогою Cu Cx Cd (див Розділ 148 [Каталоги], с 131) Це покаже вам поточного автора Ви повинні будете спробувати звязатися і попередити його, щоб він не продовжував редагування Найчастіше, наступний крок

– Записати вміст вашого буфера Emacs під іншим імям і використовувати diff,

щоб порівняти два файли

144  Повернення буфера

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

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

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

Деякі види буферів, чий вміст відображає відмінні від файлів дані, такі як буфери Dired, також можуть бути повернені Для них повернення означає повторне счітиваеніе їх вмісту з відповідної бази даних Буфери, створені явно за допомогою Cx b, не можуть бути повернуті revert-buffer повідомляє про помилку, коли її просять зробити це

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

Щоб запитати таку поведінку, встановіть змінну revert-without-query рівний списку регулярних виразів Коли імя файлу відповідає одному з цих регулярних виразів, find-file і revert-buffer повертатимуть його автоматично, якщо він змінився – за умови, що сам буфер ні модифікований (Якщо ви редагували текст, скидати ваші зміни буде недобре)

145  Самозбереження: захист від загибелі

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

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

1451  Файли для самозбереження

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

Зазвичай імя файлу для самозбереження створюється додаванням знака # перед і після імені файлу, до якого ви звернулися Таким чином, буфер, який звертається до файлу fooc, буде самозбереглися в файл # Fooc #. Більшість буферів, які не зверталися до файлів, самосохраняться, тільки якщо ви явно звернулися щодо цього коли вони автоматично записуються, імя файлу для самозбереження створюється додаванням до імені буфера знаків #% на початку і # в кінці Наприклад, буфер * mail *, в якому ви складаєте повідомлення, які самозберігається у файл з імям #% * mail * #. Імена файлів для самозбереження конструюються таким чином, якщо ви не перепрограмуєте частина Emacs, щоб робилося щось інше (функції make-auto-save-file-name і auto-save-file-name-p) Файл, яке буде використовуватися для самозбереження в буфері, складається, коли в цьому буфері включається самозбереження

Коли ви видаляєте значну частину тексту великого буфера, самозбереження в ньому тимчасово вимикається Це робиться з тієї причини, що якщо ви видалили текст ненавмисно, самозбереження файл може виявитися для вас корисніше, якщо віддалений текст все ще залишається в ньому Щоб після цього знову дозволити самозбереження, запишіть буфер командою Cx Cs або використовуйте Cu 1 Mx auto-save

Якщо ви хочете, щоб у файлі, до якого ви звернулися, виконувалося самозбереження, встановіть змінну auto-save-visited-file-name в відмінне від nil значення У цьому режимі в дійсності немає відмінностей між самозбереженням і явним збереженням

Файл самозбереження видаляється, коли ви записуєте вміст буфера у файл, до якого він звертався Щоб перешкодити цьому, встановіть змінну deleteauto-save-files рівний nil Зміна імені відвіданого файлу за допомогою Cx Cw або set-visited-file-name перейменовує файл для самозбереження, щоб він відповідав імені нового відвіданого файлу

1452  Управління самозбереженням

Кожен раз, коли ви звертаєтеся до файлу, для буфера цього файлу включається самозбереження, якщо змінна auto-save-default не дорівнює nil (але не в пакетному режимі див Глава 3 [Вхід в Emacs], с 33) За замовчуванням ця змінна дорівнює t, тому включене самозбереження – це звичайний стан буферів, що працюють з файлами Самозбереження може включатися або вимикатися для будь-якого існуючого буфера за допомогою команди Mx auto-save-mode Подібно іншим командам другорядних режимів, Mx auto-save-mode включає самозбереження при позитивному аргументі і вимикає, коли аргумент дорівнює нулю або відємний без аргумент вона перемикає режим

Emacs виробляє самозбереження періодично, грунтуючись на підрахунку числа знаків, набраних вами з того моменту, як самозбереження було зроблено в останній раз Мінлива auto-save-interval визначає, скільки знаків доводиться між двома самозбереження За умовчанням вона дорівнює 300

Самозбереження також проводиться, коли ви перестаєте друкувати на деякий час Мінлива auto-save-timeout каже, скільки секунд повинен чекати Emacs то того, як зробити самозбереження (а також, можливо, і збірку сміття) (Дійсний період часу більше, якщо теущій буфер великий це евристика, мета якої – не заважати вам, коли ви редагуєте довгі буфери, самозбереження в яких займає помітне час) Самозбереження під час періодів бездіяльності виконує два завдання: по-перше, воно гарантує, що ваша робота зберігається, якщо ви відійшли на деякий час від терміналу по-друге, воно може дозволити уникнути самозбереження в той час, коли ви насправді друкуєте

Emacs також виконує самозбереження, коли отримує фатальну помилку Це включає знищення завдання Emacs за допомогою команди оболонки, як kill% emacs, або в результаті розєднання телефонного лінії або звязку по мережі

Ви можете явно запросити самозбереження за допомогою команди Mx do-auto-save

1453  Відновлення даних з самозбереження

Ви можете використовувати вміст файлу самозбереження для відновлення втрачених даних, запустивши команду Mx recover-file hRETфайл hRETi Ця команда звертається до файлу і потім (після вашого підтвердження) переписує зміст з його самозбереження файлу # файл #. Ви можете потім зберегти цей буфер за допомогою Cx Cs, щоб помістити відновлений текст в сам файл Наприклад, щоб відновити файл fooc з його файлу для самозбереження # fooc #, зробіть наступне:

M-x recover-file hRETi  fooc hRETi

yes hRETi

C-x C-s

Перед тим як запросити у вас підтвердження, Mx recover-file показує Распе-

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

порівняти їх розміри та дати Якщо файл для самозбереження старше, то Mx recover-file

не пропонує його зчитувати

Якщо Emacs або комьютер зазнали краху, ви можете відновити всі файли, які ви редагували, з їх самозбереження файлів за допомогою команди Mx recover-session Вона спочатку показує перелік записаних перерваних сеансів Перемістіть точку до потрібної вам і наберіть Cc Cc

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

*

*