Tôi thường làm việc trên các tệp được cập nhật trong hệ thống tệp thông qua kiểm soát phiên bản. Cách nhanh chóng để tải lại tệp mà không cần phải tải lại C-x C-f
tệp và được hỏi liệu tôi có muốn tải lại không?
Tôi thường làm việc trên các tệp được cập nhật trong hệ thống tệp thông qua kiểm soát phiên bản. Cách nhanh chóng để tải lại tệp mà không cần phải tải lại C-x C-f
tệp và được hỏi liệu tôi có muốn tải lại không?
Câu trả lời:
M-x revert-buffer
sẽ làm chính xác những gì bạn muốn. Nó vẫn sẽ yêu cầu xác nhận.
Một tùy chọn khác (yêu thích của tôi) là chức năng dưới đây:
;; 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)
.
Ngoài ra còn auto-revert-mode
có nó tự động và cung cấp cho bạn thông tin phản hồi.
Từ chuỗi doc:
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.
Một tùy chọn khác, mà tôi sử dụng, find-alternate-file
bị ràng buộc C-x C-v
. Điều này sẽ mở một tập tin sử dụng lại bộ đệm hiện tại của bạn.
Theo mặc định, nó trỏ đến tệp bạn đang truy cập, vì vậy bạn chỉ cần nhập C-x C-v RET
để tải lại tệp của mình. Nó sẽ không nhắc trừ khi bộ đệm của bạn có dữ liệu chưa được lưu.
Một số chế độ phi văn bản như image-mode
(sử dụng cho hình ảnh render, pdf, svgs ... vv) và dired
đã revert-buffer
buộc phải g
để truy cập nhanh hơn.
C-x C-v
.
Emacs gọi đây reverting
.
Bạn có thể hoàn nguyên các tập tin hiện tại với M-x revert-buffer
. Điều này nhắc nhở xác nhận xem tệp đã được sửa đổi hay chưa, ngoại trừ các tệp khớp với các mẫu được liệt kê trong biến revert-without-query
(xem hướng dẫn để biết chi tiết). Một phiền toái không thường xuyên khác revert-buffer
là nó đặt lại chế độ tập tin về mặc định.
Tôi sử dụng chức năng sau đây để hoàn nguyên một loạt các tập tin, được đặt theo tên. Nếu một tệp không được mở trong một số bộ đệm, nó sẽ bị bỏ qua.
(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)))))))
Trường hợp sử dụng điển hình cho chức năng này là sau khi cập nhật tệp từ kiểm soát phiên bản. Sử dụng emacsclient
để gọi revert-files
trên tất cả các tệp đã được cập nhật hoặc (điều này dễ hơn và chỉ chậm hơn một chút) trên tất cả các tệp có liên quan đến bản cập nhật. Tôi gọi kịch bản shell sau, truyền cho nó các tệp dưới dạng đối số:
#! /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)"
Ví dụ sử dụng:
svn update
find -name .svn -prune -o -type f -exec emacsclient-revert {} +
bạn cũng có thể bật chế độ hoàn nguyên tự động toàn cầu như hiển thị bên dưới
(global-auto-revert-mode 1)
Điều này hữu ích khi bạn thực hiện nhiều kiểm tra các tệp js của mình với chế độ tự động sửa lỗi được bật, như trong jssc.
Bạn có thể sử dụng find-alternate-file
, được ràng buộc C-x C-vtheo mặc định và chỉ cần gõ RETvào dấu nhắc để tải lại tệp.
Đối với người dùng spacemacs: SPC b R
( spacemacs/safe-revert-buffer
).
Để bỏ qua xác nhận, các câu trả lời khác đã bao hàm điều đó, mặc dù tôi đồng ý với những người khác rằng có lẽ không nên liên kết điều đó với một khóa.
Magit tự động quản lý đảo ngược tệp cho bạn, do đó giải quyết vấn đề cốt lõi của bạn. Bạn cũng được hưởng lợi từ các tính năng khác của nó.
Dưới đây là các tài liệu để điều chỉnh các cài đặt bạn quan tâm:
Nếu bạn gắn bó với Magit, hãy chắc chắn bật cả 3 chế độ WIP toàn cầu (Work In Progress) để tránh mất việc.
Do đó, bạn có thể thực hiện các hành động kiểm soát phiên bản bên trong Emacs với Magit và tránh hoàn toàn vấn đề ban đầu của bạn.
misc-cmds.el
. Không phải là nó phức tạp, nhưng khi bạn sao chép một cái gì đó chính xác thì đó là phép lịch sự phổ biến để trỏ đến nguồn.