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

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

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

14311  Одиночні або нумеровані резервні файли

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

Якщо ви захочете мати серію пронумерованих резервних файлів, то їх імена створюються шляхом додавання . ~, Номери і другий ~ до вихідного імені файлу Таким чином, резервні копії файлу evalc будуть називатися evalc ~ 1 ~, evalc ~ 2 ~ і так далі, проходячи через такі імена, як evalc ~ 259 ~ і вище

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

Вибір єдиного резервного файлу або декількох управляється змінної

version-control Її можливі значення:

t Створювати нумеровані резервні файли

nil Створювати нумеровані резервні файли для файлів, які вже мають нумеровані файли Інакше створювати один резервний файл

never Ніколи не створювати нумеровані файли, завжди робити одиночний резерв-

ний файл

Ви можете встановити version-control локально в окремому буфері, для управління створенням резервних копій файлу цього буфера Наприклад, режим Rmail локально встановлює version-control на never, щоб бути впевненим, що для Rmail-файла існує тільки один резервний файл Див Розділ 3124 [Локальні змінні], с 350

Якщо ви встановите оточення VERSION_CONTROL, щоб вказати різним утилітам GNU, що робити з резервними файлами, Emacs також підпорядковується їй, встановлюючи відповідно під час запуску змінну Лиспа version-control Якщо значення цієї змінної середовища одно t або numbered, то version-control стає рівною t якщо це значення дорівнює nil або existing, то version-control стає nil якщо це never або simple, то version-control встановлюється в значення never

14312  Автоматичне видалення резервних файлів

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

Двома змінними, контролюючими видалення, є kept-old-versions і kept-new-versions Їх значення – це, відповідно, номер найстарішої резервної копії файлу (найменший номер), яка повинна бути збережена, і номер самої останньої копії (найбільший номер), яка повинна зберігатися кожен раз, коли створюється нова копія Памятайте, що ці значення використовуються відразу після того, як створиться нова резервна копія новостворена копія включається в лічильник kept-new-version За замовчуванням обидві змінні рівні 2

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

Команда Dired (Точка) також може бути використана для видалення старих версій

Див Розділ 283 [Видалення в Dired], с 291

14313  Копіювання vs перейменування

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

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

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

Зміна власника зазвичай є гарною ідеєю, оскільки тоді завжди видно, хто останнім редагував файл Крім того, власники резервних копій показують, хто зробив ці версії Іноді існує файл, чий власник не повинен змінюватися гарна ідея для таких файлів – включити локальні списки змінних для установки backup-by-copying-when-mismatch (див Розділ 3125 [Змінні файлу], с 351)

Вибір перейменування або копіювання управляється трьома змінними За замовчуванням робиться перейменування Якщо змінна backup-by-coping – НЕ nil, то використовується копіювання В іншому випадку, якщо змінна backup-by-copying-when-linked не дорівнює nil, то робиться копіювання для файлів, які мають декілька імен, але може все ж робитися перейменування, коли редагований файл має тільки одне імя Якщо змінна backup-by-copying-when-mismatch – НЕ nil, тоді, якщо перейменування призвело б до зміни власника файлу або групи, то робиться копіювання backup-by-copying-when-mismatch за замовчуванням дорівнює t, якщо ви запустили Emacs як привілейований користувач

Коли файл знаходиться під управлінням системи контролю версій (див Розділ 147 [Управління версіями], с 116), Emacs зазвичай не створює резервних копій як звичайно Але вилучення та фіксування почасти подібні створенню резервних копій Вони схожі, на жаль, і тим, що як правило руйнують жорсткі посилання, розєднуючи імя файлу, до якого ви звернулися, і всі інші імена цього ж файлу Це не вина Emacs – це робить система управління версіями

1432  Захист від одночасного редагування

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

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

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

Якщо ви почнете змінювати буфер, коли файл, до якого він звертається, захоплений кемто ще, це призведе до зіткнення, і Emacs запитає вас, що робити, викликавши лісповскую функцію ask-user-about-lock Ви можете перевизначити цю функцію для своїх потреб Стандартне визначення цієї функції задає вам питання і приймає три можливі відповіді:

s Перехопити захоплення Той користувач, хто вже редагував файл, втрачає захоплення, а ви його купуєте

p Продовжувати Йти далі і редагувати файл, незважаючи на те, що він кимось захоплений

q Вийти Це призводить до помилки (file-locked), а зміни, які ви катував-

лись зробити в буфері, насправді не матимуть місця

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

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

Якщо в Emacs або в операційній системі трапляється фатальний збій, це може залишити файли захоплення, які вже втратили актуальність Тому ви можете іноді отримати попередження про уявні зіткненнях Коли ви виявите, що столконеніе ложно, просто використовуйте p, щоб веліти 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>

*

*