ฉันมักจะทำงานกับไฟล์ที่มีการปรับปรุงในระบบไฟล์ผ่านการควบคุมเวอร์ชัน เป็นวิธีที่รวดเร็วในการโหลดไฟล์โดยไม่ต้องไปC-x C-f
ที่ไฟล์อีกครั้งและได้รับการถามว่าฉันต้องการที่จะโหลดมันคืออะไร?
ฉันมักจะทำงานกับไฟล์ที่มีการปรับปรุงในระบบไฟล์ผ่านการควบคุมเวอร์ชัน เป็นวิธีที่รวดเร็วในการโหลดไฟล์โดยไม่ต้องไปC-x C-f
ที่ไฟล์อีกครั้งและได้รับการถามว่าฉันต้องการที่จะโหลดมันคืออะไร?
คำตอบ:
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
ซึ่งทำโดยอัตโนมัติและให้ข้อเสนอแนะ
จากสตริง 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.
อีกตัวเลือกหนึ่งที่ผมใช้เป็นที่ผูกไว้กับ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 script ต่อไปนี้โดยส่งผ่านไฟล์เป็นอาร์กิวเมนต์:
#! /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 {} +
คุณยังสามารถเปิดใช้งานโหมดการเปลี่ยนกลับอัตโนมัติทั่วโลกดังที่แสดงด้านล่าง
(global-auto-revert-mode 1)
สิ่งนี้มีประโยชน์เมื่อคุณทำการตรวจสอบไฟล์ js ของคุณเป็นจำนวนมากโดยเปิดใช้งานโหมดแก้ไขอัตโนมัติเช่นใน jssc
revert-buffer
อยู่ที่นั่น แต่ฉันชอบที่จะมีข้อเสนอแนะบางอย่าง
.emacs
ฉันได้ต่อไปนี้ในของฉัน
(global-set-key (kbd "C-c r") (lambda ()
(interactive)
(revert-buffer t t t)
(message "buffer is reverted")))
คุณสามารถใช้find-alternate-file
ซึ่งถูกผูกไว้C-x C-vโดยค่าเริ่มต้นและเพียงพิมพ์RETที่พรอมต์เพื่อโหลดไฟล์
สำหรับผู้ใช้ spacemacs: SPC b R
( spacemacs/safe-revert-buffer
)
สำหรับการข้ามการยืนยันคำตอบอื่น ๆ ครอบคลุมอยู่แล้วแม้ว่าฉันจะเห็นด้วยกับคนอื่นว่ามันอาจไม่ควรผูกมันไว้กับกุญแจ
Magit จัดการการกลับรายการไฟล์ให้คุณโดยอัตโนมัติดังนั้นการแก้ปัญหาหลักของคุณ คุณยังได้รับประโยชน์จากคุณสมบัติอื่น ๆ
นี่คือเอกสารสำหรับปรับแต่งการตั้งค่าที่คุณสนใจ:
หากคุณใช้ Magit อย่าลืมเปิดใช้งานโหมด WIP ทั่วโลกทั้ง 3 โหมด (อยู่ระหว่างดำเนินการ) เพื่อหลีกเลี่ยงการสูญเสียงาน
คุณสามารถทำการควบคุมเวอร์ชันภายใน Emacs ด้วย Magit และหลีกเลี่ยงปัญหาดั้งเดิมของคุณได้ทั้งหมด
misc-cmds.el
คุณอาจได้อ้างถึงห้องสมุดที่รหัสที่เป็นจาก: ไม่ว่ามันมีความซับซ้อน แต่เมื่อคุณคัดลอกบางสิ่งบางอย่างว่ามันเป็นมารยาททั่วไปจะชี้ไปที่แหล่งที่มา