Как отключить Emacs от проверки файла буфера было изменено вне редактора?
Emacs: как отключить проверку файла на диске?
Ответ 1
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
, тогда режим включен, в противном случае он выключен.
Ответ 2
Мне было досадно, потому что каждый раз, когда я переключал ветки в git, emacs думал, что все мои файлы были изменены.
Revbuffs помогает вам справиться с симптомами этого. Это позволяет вам перезагрузить все ваши буферы.
Вы также можете попробовать (global-auto-revert-mode)
, который автоматически вернет ваши файлы на то, что на диске.
Ответ 3
В моем .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)
Ответ 4
В моем случае я хотел:
(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.