Работа  с файлами – ЧАСТЬ 2

Если заданное вами имя файла содержит символы подстановки, Emacs обращается ко всем файлам, соответствующим  этому имени. См. Раздел 14.13 [Буквальные имена файлов], с. 134, если вы хотите обратиться к файлу, чье имя в самом деле содержит символы подстановки.

Если операционная система не позволяет вам изменять файл, к которому вы обращаетесь, Emacs делает буфер доступным только для чтения, так что у вас не получится внести изменения, которые будет проблематично впоследствии сохранить. Вы можете сделать буфер доступным для записи с помощью C-x C-q (vc-toggle-read-only).  См.  Раздел 15.3 [Другие операции с буферами], с. 136.

Иногда вы можете  захотеть обратиться к файлу в режиме только чтения, чтобы защититься от случайного внесения изменений; делайте это, обращаясь к файлу с помощью команды C-x C-r (find-file-read-only).

Если вы обратились к  несуществующему файлу неумышленно  (так  как  вы набрали неправильное  имя файла), используйте  команду C-x C-v (find-alternate-file),  чтобы обратиться к  файлу, который вам нужен на самом деле.   C-x C-v подобна C-x C-f,  но уничтожает  текущий буфер (после того,  как  сначала предложит записать его, если он изменен). При считывании нового имени файла она вставляет полное имя текущего файла, оставляя точку сразу после имени каталога; это удобно, если вы сделали небольшую ошибку, когда вводили имя файла.

Если вы обращаетесь к файлу, который существует, но не может быть прочитан, C-x

C-f выдает ошибку.

C-x 4 f (find-file-other-window)  похожа на C-x C-f,  но буфер, содержащий  описанный файл, выбирается  в другом окне.   Окно,  которое было выбранно до вызова C-x 4 f,  продолжает показывать тот  же  буфер, который уже  показывался. Если эта команда используется, когда существует только одно окно, то это окно делится на два, одно из которых продолжает показывать то же, что и прежде, а другое показывает новый затребованный файл. См. Глава 16 [Окна], с. 141.

C-x 5 f (find-file-other-frame) аналогична этой команде, но открывает новый фрейм или делает видимым любой существующий фрейм,  показывающий искомый файл. Это возможно, только если вы пользуетесь оконной системой. См. Глава 17 [Фреймы], с. 147.

Если вы хотите  отредактировать файл как последовательность знаков без особой перекодировки или преобразования,  используйте  команду M-x find-file-literally.   Она обращается к файлу, как C-x C-f,  но не делает преобразования формата (см. Раздел 21.11 [Форматированный текст], с. 198), преобразования знаковых кодов (см.  Раздел 18.7 [Системы кодирования], с. 165) или автоматической распаковки (см.  Раздел 14.11 [Сжатые файлы], с. 133). Если вы уже обращаетесь к этому же файлу обычным способом (не буквально), эта команда спросит вас, обратиться ли к нему в этот раз буквально.

Две переменные-ловушки позволяют расширениям изменять способ обращения к файлам. Обращение к несуществуещему  файлу запускает функции в списке find-file-notfound-hooks;  значение этой переменной — список функций, и эти функции вызываются одна за другой до тех пор, пока одна из них не вернет отличное от nil значение. Любое обращение к файлу, существующему  или нет, предполагает, что find-file-hooks содержит список функций, и вызывает их все одну за другой. В обоих случаях функции вызываются без аргументов. Первой применяется  переменная find-file-not-found-hooks.  Эти переменные не нормальные ловушки, и для обозначения этого их имена заканчиваются на

‘-hooks’, а не на ‘-hook’.  См. Раздел 31.2.3 [Ловушки], с. 349.

Есть несколько способов автоматически указать основной режим для редактирования файла (см.   Раздел 19.1 [Выбор режима], с. 175) и установить локальные переменные, определенные для этого файла (см. Раздел 31.2.5 [Переменные файла], с. 351).

14.3  Сохранение файлов

Сохранение  буфера в Emacs означает запись его содержимого обратно в файл, к кото-

рому этот буфер обращается.

C-x C-s      Сохранить текущий буфер в файле, к которому этот буфер обращается (savebuffer).

C-x s          Сохранить некоторые или все буферы в их соответствующих  файлах (savesome-buffers).

M-~            Забыть, что текущий буфер был изменен (not-modified).

C-x C-w     Сохранить текущий буфер в заданный файл (write-file).

M-x set-visited-file-name

Изменить имя файла, под которым текущий буфер будет сохраняться.

Если вы хотите сохранить файл и сделать его изменения постоянными, наберите C-x C-s (save-buffer). После того, как запись закончится, C-x C-s печатает сообщение подобное этому:

Wrote /u/rms/gnu/gnu.tasks

Если же выбранный  буфер не модифицирован (в нем не было сделано изменений с тех пор, как он был создан или последний раз записан), его запись не делается, так как это не имеет смысла. Вместо этого, C-x C-s печатает такое сообщение в эхо-области:

(No changes need to  be saved)

Команда C-x s (save-some-buffers) предлагает записать какие-либо или все измененные буферы. Она спрашивает вас, что нужно сделать с каждым буфером. Возможные варианты ответа аналогичны вариантам для query-replace:

y                 Сохранить этот буфер и спрашивать об остальных.

n                Не сохранять этот буфер, но спрашивать об остальных.

!         Сохранить этот буфер и все остальные  без дальнейших  вопросов.

hRETi             Прервать save-some-buffers и больше ничего не записывать.

.         Сохранить этот буфер и выйти из save-some-buffers, не спрашивая  об осталь-

ных буферах.

C-r             Просмотреть  буфер, о котором вас спросили в данный момент.  Когда вы выйдите из режима View, вы снова попадаете в save-some-buffers, которая продолжает задавать вам вопросы.

C-h            Показать справочное сообщение о этих вариантах ответа.

C-x C-c,  последовательность  ключей  для выхода из  Emacs, вызывает save-somebuffers и, следовательно, задает эти же вопросы.

Если вы изменили буфер, но не хотите записывать изменения, вы должны предпринять некоторые действия, чтобы предотвратить это.  Иначе каждый раз, когда вы используете  C-x s или C-x C-c, вы можете  по ошибке  его записать. С одной стороны, вы можете набрать M-~ (not-modified),  что сбрасывает показатель измененности буфера. Если вы сделаете так, то ни одна из команд записи не будет думать, что буфер нужно сохранять. (‘~’ часто используется как  математический символ для обозначения  отрицания, таким образом, последовательность  M-~ — это мета-отрицание). Вы могли бы также использовать set-visited-file-name (смотрите ниже), чтобы пометить буфер, как обратившийся к файлу с другим именем, который не использовался  для чего-то важного. С другой стороны, вы можете отменить все изменения,  сделанные с тех пор, когда к файлу обратились, или он был записан, с помощью повторного считывания текста из файла. Это называется возвращением к прежнему состоянию. См. Раздел 14.4 [Возвращение], с. 113. Вы могли бы также отменить все изменения,  повторяя команду отмены C-x u достаточно долго; но возвращение проще.

M-x set-visited-file-name заменяет имя файла, к которому обращается текущий буфер.  Она считывает новое имя файла, используя  минибуфер. Затем соответственно изменяется имя буфера (если новое имя уже  не используется). set-visited-file-name  не записывает  буфер в новый вызванный файл, она просто меняет записи внутри Emacs на случай последующего сохранения. Она так же помечает  буфер как “измененный”, так что C-x C-s будет его сохранять.

Если вы хотите  пометить буфер как  обращающийся  к  другому  файлу и сразу его записать, используйте  C-x C-w (write-file).   Это совершенно  точный эквивалент setvisited-file-name,  за которым следует C-x C-s.   Использование  C-x C-s в буфере,  который не обращался  к файлу, имеет то же  самое действие, что и C-x C-w; то есть, она считывает имя файла, метит буфер как обращающийся к этому файлу и записывает его

туда. По умолчанию имя файла в буфере, который не обращался к файлу, составляется из имени буфера и каталога по умолчанию для этого буфера.

Если новое имя файла подразумевает  основной режим, то C-x C-w в большинстве случаев переключает в этот режим. Команда set-visited-file-name ведет себя так же. См. Раздел 19.1 [Выбор режима], с. 175.

Если Emacs собирается записать файл и видит, что дата последней версии на диске не соответствует тому, что он последний раз читал или записывал, то он ставит вас в известность об этом факте, так как это, возможно, выявляет проблему, вызванную одновременным редактированием, и требует вашего незамедлительного внимания. См. Раздел 14.3.2 [Защита от одновременного редактирования], с. 112.

Если переменная  require-final-newline  не  равна nil,  Emacs ставит ограничитель строки в конец каждого файла,  который не закончивается  им, каждый раз, когда файл сохраняется или записывается. По умолчанию эта переменная равна nil.

14.3.1  Резервные  файлы

В большинстве операционных систем переписывание  файла автоматически разрушает все сведения  о том, что этот файл содержал раньше.   Таким образом, запись файла из Emacs отбрасывает старое содержимое файла — или может отбросить, если перед фактической записью Emacs предусмотрительно  не скопирует старое содержимое в другой файл, называемый резервным.

Для большинства  файлов решение о создании резервных копий определяется переменной make-backup-files.   На большинстве операционных  систем ее  значение по умолчанию равно t, что велит Emacs создавать резервные файлы.

Для файлов, находящихся под контролем системы управления версиями (см. Раздел 14.7 [Управление версиями], с. 116), это определяется переменной vc-make-backup-files.  По умолчанию она равна nil, так как резервные копии излишни, раз вы записываете  все предыдущие версии в системе управления версиями.  См. Раздел 14.7.9.2 [Обработка  рабочих файлов в VC], с. 130.

Существующее по умолчанию значение переменной backup-enable-predicate запреща-

ет записывать резервные копии для файлов из каталога ‘/tmp’.

По вашему выбору Emacs может сохранять либо только один резервный файл, либо несколько нумерованных резервных файлов для каждого файла, который вы редактировали.

Источник: Ричард Столмен, Руководство по GNU Emacs

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий