Могу ли я установить определенный файл для автоматического и бесшумного принятия изменений?

9

То есть, могу ли я указать для определенного файла, что я не хочу, чтобы Emacs уведомлял меня об изменении файла на диске и подсказывал, хочу ли я принимать изменения или нет? Я не хочу делать это глобально, просто для файлов, которые я знаю, часто будут изменяться за пределами Emacs (в частности, связанные с календарем файлы Org).

emacsomancer
источник

Ответы:

8

Вы можете сделать это для определенного буфера с помощью M-x auto-revert-mode( вручную ). Для файловых буферов это будет проверять каждую auto-revert-intervalсекунду (по умолчанию 5) на наличие изменений и автоматически обновлять буфер с диска.

Ваш заголовок говорит «конкретный файл», а в теле вашего вопроса упоминается тип файла (org files). В зависимости от ваших обстоятельств, вот несколько способов, которыми вы можете установить этот режим для постоянного достижения желаемого эффекта. Более ранние методы, возможно, более чистые и эффективные, если они применимы к вашему конкретному случаю использования.

Если вы знаете, что хотите это для каждого файла определенного типа, рассмотрите возможность добавления ловушки режима в настройку init.

(add-hook 'org-mode-hook (lambda () (auto-revert-mode 1)))

Если вы знаете, что хотите это для всего, что находится в определенном каталоге, рассмотрите возможность установки его в .dir-locals.el в соответствующем месте, убедившись, что VCS игнорирует файл локальных настроек, если это необходимо. Этот пример будет применяться ко всем буферам режима org для файлов в одном каталоге (и его подкаталогах). Вы также можете запустить M-x add-dir-local-variableEmacs для генерации и сохранения этого для вас автоматически.

(
  (org-mode . ((auto-revert-mode . 1)))
 )

Если ни один из двух описанных выше подходов не работает для вас, рассмотрите локальную переменную файла, установленную в каждом файле. Самый короткий, самый общий способ установить один из них - включить в первую строку файла назначения следующее:

-*- eval: (auto-revert-mode 1); -*-

В исходных файлах текст может следовать за разделителем комментариев (//, # и т. Д.). Вы можете запустить, M-x add-file-local-variable-proplineчтобы Emacs сгенерировал это для вас автоматически, или M-x add-file-local-variableдля формата, который использует нижнюю часть вашего файла вместо верхней.

Используйте этот метод, только если вы не делитесь файлом с кем-либо еще. Из руководства GNU :

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

Миан
источник
2
Разве не (auto-revert-mode 1)канонический способ включить второстепенный режим вместо setq?
mbork
1
Да, ты прав. Очистка этого примера за одну секунду. Спасибо.
Миан
1
Пожалуйста. (Тем не менее, AFAIU, локальные переменные файла лучше всего подходят для
варианта
1
Вы можете быть правы. ИМО это зависит от деталей их файловой организации. Если известные им файлы будут часто изменяться за пределами emacs, все они являются файлами org, или все они находятся в одном и том же месте (например, в каталоге Dropbox), подход на основе режима или каталога может быть чище и проще и позволит избежать захламляя свои файлы в качестве бонуса.
Миан
2
Для взаимодействия с обоими этими методами есть add-file-local-variableи add-dir-local-variable.
Шон Оллред
3

Да. Поместите это в конец вашего файла.

* COMMENT Config
Local Variables:
eval: (auto-revert-mode 1)
End:

Это предполагает Org-режим, для других режимов используйте комментарии на языке, используемом, как объяснено в ссылке, приведенной ниже.

Примечание: см. Локальные переменные в файлах в руководстве для справки, информации о безопасности и предостережения, что это не всегда может быть хорошей идеей. Кроме того, в разделе о возврате сказано, например, как изменить 5-секундный интервал по умолчанию для автоматического возврата.

mbork
источник
Это обязательно должно быть в конце? У меня есть сценарий, который генерирует файлы .org, и я поместил его в самом начале - который, похоже, не работает ....
emacsomancer
1
Да, смотрите ссылку. И посмотрите другие ответы для решения первой линии.
mbork