Emacs: как отключить проверку «файл изменен на диске»? - PullRequest
19 голосов
/ 18 февраля 2010

Как отключить Emacs от проверки, что буферный файл был изменен вне редактора?

Ответы [ 4 ]

18 голосов
/ 18 февраля 2010

Emacs действительно пытается вам здесь помочь. Прочтите информационную страницу на Защита от одновременного редактирования .

Но, если вы все еще хотите избежать этого сообщения / приглашения, вы можете переопределить функцию, которая выполняет запрос:

(defun ask-user-about-supersession-threat (fn)
  "blatantly ignore files that changed on disk"
  )
(defun ask-user-about-lock (file opponent)
  "always grab lock"
   t)

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

Я бы посоветовал не переопределять две процедуры, но они есть, если хотите.


В случае отключения global-auto-revert-mode вы можете отключить это. Добавьте это к вашему .emacs:
(global-auto-revert-mode -1)

Вы можете узнать, включен ли режим, посмотрев переменную с тем же именем:

C-h v global-auto-revert-mode RET

Если значение t, то режим включен, в противном случае он выключен.

9 голосов
/ 10 апреля 2015

В моем .emacs есть следующее.Это заставляет Emacs спрашивать только об действительно измененных файлах.Если файл остается тем же байтовым, только его временная метка обновляется, как это часто случается, когда вы переключаете ветви в VCS, это «изменение» игнорируется Emacs.

;; Ignore modification-time-only changes in files, i.e. ones that
;; don't really change the contents.  This happens often with
;; switching between different VC buffers.

(defun update-buffer-modtime-if-byte-identical ()
  (let* ((size      (buffer-size))
         (byte-size (position-bytes size))
         (filename  buffer-file-name))
    (when (and byte-size (<= size 1000000))
      (let* ((attributes (file-attributes filename))
             (file-size  (nth 7 attributes)))
        (when (and file-size
                   (= file-size byte-size)
                   (string= (buffer-substring-no-properties 1 (1+ size))
                            (with-temp-buffer
                              (insert-file-contents filename)
                              (buffer-string))))
          (set-visited-file-modtime (nth 5 attributes))
          t)))))

(defun verify-visited-file-modtime--ignore-byte-identical (original &optional buffer)
  (or (funcall original buffer)
      (with-current-buffer buffer
        (update-buffer-modtime-if-byte-identical))))
(advice-add 'verify-visited-file-modtime :around #'verify-visited-file-modtime--ignore-byte-identical)

(defun ask-user-about-supersession-threat--ignore-byte-identical (original &rest arguments)
  (unless (update-buffer-modtime-if-byte-identical)
    (apply original arguments)))
(advice-add 'ask-user-about-supersession-threat :around #'ask-user-about-supersession-threat--ignore-byte-identical)
9 голосов
/ 18 февраля 2010

Меня это раздражало, потому что каждый раз, когда я переключал ветки в git, emacs думал, что все мои файлы изменились.

Revbuffs поможет вам справиться с симптомами этого. Это позволяет вам перезагружать все ваши буферы.

Вы также можете попробовать (global-auto-revert-mode), который автоматически вернет ваши файлы к тому, что находится на диске.

4 голосов
/ 26 ноября 2016

В моем случае я хотел:

(setq revert-without-query '(".*"))

Документация для revert-without-query:

Specify which files should be reverted without query.
The value is a list of regular expressions.
If the file name matches one of these regular expressions,
then ‘revert-buffer’ reverts the file without querying
if the file has changed on disk and you have not edited the buffer.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...