Answers:
M-x revert-buffer
会完全按照您想要的去做。它将仍然要求确认。
另一个选项(我的最爱)是以下功能:
;; Source: http://www.emacswiki.org/emacs-en/download/misc-cmds.el
(defun revert-buffer-no-confirm ()
"Revert buffer without confirmation."
(interactive)
(revert-buffer :ignore-auto :noconfirm))
(revert-buffer t (not (buffer-modified-p)) t)
。
也有auto-revert-mode
自动执行并提供反馈的工具。
从文档字符串:
auto-revert-mode is an interactive autoloaded compiled Lisp function
in `autorevert.el'.
(auto-revert-mode &optional ARG)
Toggle reverting buffer when the file changes (Auto Revert mode).
With a prefix argument ARG, enable Auto Revert mode if ARG is
positive, and disable it otherwise. If called from Lisp, enable
the mode if ARG is omitted or nil.
Auto Revert mode is a minor mode that affects only the current
buffer. When enabled, it reverts the buffer when the file on
disk changes.
Use `global-auto-revert-mode' to automatically revert all buffers.
Use `auto-revert-tail-mode' if you know that the file will only grow
without being changed in the part that is already in the buffer.
我使用的另一个选项find-alternate-file
绑定到C-x C-v
。这将打开一个文件,重用您当前的缓冲区。
默认情况下,它指向您当前所在的文件,因此您只需键入C-x C-v RET
即可重新加载文件。除非缓冲区中有未保存的数据,否则它不会提示。
某些非文本模式,例如image-mode
(用于渲染图片,pdf,svgs等),并dired
已revert-buffer
绑定到该模式g
以加快访问速度。
C-x C-v
。
Emacs称之为reverting
。
您可以使用还原当前文件M-x revert-buffer
。这会提示您确认文件是否已被修改,但与变量中列出的模式匹配的文件除外revert-without-query
(有关详细信息,请参见手册)。的另一个不便之处revert-buffer
是,它将文件模式重置为默认模式。
我使用以下函数还原一堆文件,按名称给出。如果未在某个缓冲区中打开文件,则将其忽略。
(defun revert-files (&rest files)
"Reload all specified files from disk.
Only files that are currently visited in some buffer are reverted.
Do not ask confirmation unless the buffer is modified."
(save-excursion
(let ((revert-without-query '("")))
(dolist (file-name files)
(message "Considering whether to revert file %s" file-name)
(let ((buf (find-buffer-visiting file-name)))
(when buf
(message "Reverting file in buffer %s" (buffer-name buf))
(set-buffer buf)
(revert-buffer t nil t)))))))
此功能的典型用例是从版本控制更新文件之后。使用emacsclient
调用revert-files
所有已更新,或将文件(这是比较容易的,只有稍微慢)所有由更新有关的文件。我调用以下shell脚本,将文件作为参数传递给它:
#! /bin/sh
# Similar to gnuclient, but call `revert-files' on the files.
files=
## Find a way to convert a path to absolute. Bizarre OSes such as Windows
## require special cases. We also try to detect non-filenames such as URIs.
case `uname -s` in
CYGWIN*)
absolute_path () {
cygpath -a -w -- "$1"
};;
*)
wd="`pwd -P 2>/dev/null || pwd`"
absolute_path () {
case "$1" in
/*) printf '%s' "$1";; # ordinary absolute path
*:/*)
if expr "z$1" : 'z[0-9A-Z_a-z][-.0-9@A-Z_a-z]*:/.*'; then
printf '%s' "$1" # URI or machine:/some/path
else
printf '%s' "$wd/$1" # default to a relative path
fi;;
*) printf '%s' "$wd/$1";; # default to a relative path
esac
};;
esac
for x; do
files="$files \"`absolute_path "$x" | sed 's/[\\\\\\\"]/\\\\&/g'`\""
done
exec emacsclient -e "(revert-files$files)"
用法示例:
svn update
find -name .svn -prune -o -type f -exec emacsclient-revert {} +
您可以使用默认find-alternate-file
绑定C-x C-v的,只需RET在提示符下键入即可重新加载文件。
Magit自动为您管理文件还原,从而解决您的核心问题。您还可以从其其他功能中受益。
以下是用于调整您感兴趣的设置的文档:
如果您坚持使用Magit,还请确保启用所有3种全局WIP模式(进行中的工作),以免丢失工作。
因此,您可以使用Magit在Emacs中执行版本控制操作,并完全避免原始问题。
misc-cmds.el
。并不是说它很复杂,但是当您精确复制某些内容时,通常要指出其来源。