ไฟล์สำรองข้อมูล / บันทึกอัตโนมัติของ Emacs มีประโยชน์มาก แต่คุณสมบัติเหล่านี้ทำให้เกิดความสับสน
สำรองไฟล์
ไฟล์สำรองมีตัวหนอน ( ~
หรือ~9~
) ท้ายและจะถูกเขียนไปยังไดเรกทอรีบ้านของผู้ใช้ เมื่อmake-backup-files
Non-nil Emacs สร้างการสำรองข้อมูลของไฟล์ต้นฉบับโดยอัตโนมัติในครั้งแรกที่ไฟล์ถูกบันทึกจากบัฟเฟอร์ หากคุณกำลังแก้ไขไฟล์ใหม่ Emacs จะสร้างข้อมูลสำรองในครั้งที่สองที่คุณบันทึกไฟล์
ไม่ว่าคุณจะบันทึกไฟล์กี่ครั้งข้อมูลสำรองก็ยังคงไม่เปลี่ยนแปลง หากคุณฆ่าบัฟเฟอร์แล้วไปที่ไฟล์อีกครั้งหรือครั้งถัดไปที่คุณเริ่มเซสชัน Emacs ใหม่ไฟล์สำรองใหม่จะถูกสร้างขึ้น การสำรองข้อมูลใหม่สะท้อนให้เห็นถึงเนื้อหาของไฟล์หลังจากเปิดใหม่หรือในช่วงเริ่มต้นของการแก้ไข แต่การสำรองข้อมูลที่มีอยู่จะไม่ถูกสัมผัสอีกครั้ง ดังนั้นฉันจึงพบว่ามีประโยชน์ในการสร้างสำเนาสำรองที่มีหมายเลข (ดูการกำหนดค่าด้านล่าง)
ในการสร้างการสำรองข้อมูลให้ใช้save-buffer
( C-x C-s
) อย่างชัดเจนพร้อมกับอาร์กิวเมนต์คำนำหน้า
diff-backup
และdired-diff-backup
เปรียบเทียบไฟล์กับข้อมูลสำรองหรือในทางกลับกัน แต่ไม่มีฟังก์ชั่นในการกู้คืนไฟล์ข้อมูลสำรอง ตัวอย่างเช่นภายใต้ Windows เพื่อเรียกคืนไฟล์สำรองข้อมูล
C:\Users\USERNAME\.emacs.d\backups\!drive_c!Users!USERNAME!.emacs.el.~7~
จะต้องคัดลอกด้วยตนเองเป็น
C:\Users\USERNAME\.emacs.el
บันทึกไฟล์อัตโนมัติ
ไฟล์บันทึกอัตโนมัติใช้ hashmarks ( #
) และจะต้องเขียนไว้ในไดเรกทอรีโครงการ (พร้อมกับไฟล์จริง) เหตุผลก็คือไฟล์บันทึกอัตโนมัติเป็นเพียงไฟล์ชั่วคราวที่ Emac สร้างขึ้นจนกว่าไฟล์จะได้รับการบันทึกอีกครั้ง (เช่นด้วยการเชื่อฟังอย่างรวดเร็ว)
- ก่อนที่ผู้ใช้จะกด
C-x C-s
( save-buffer
) เพื่อบันทึกไฟล์ Emacs จะทำการบันทึกไฟล์โดยอัตโนมัติ - ตามการกดแป้นนับ ( auto-save-interval
) หรือเมื่อคุณหยุดพิมพ์ ( auto-save-timeout
)
- Emacs ยังบันทึกอัตโนมัติเมื่อใดก็ตามที่เกิดปัญหารวมถึงการฆ่างาน Emacs ด้วยคำสั่งเชลล์
เมื่อผู้ใช้บันทึกไฟล์เวอร์ชันที่บันทึกอัตโนมัติจะถูกลบ แต่เมื่อผู้ใช้ออกจากไฟล์โดยไม่บันทึกไฟล์ Emacs หรือเซสชัน X ล่มไฟล์ที่บันทึกอัตโนมัติจะยังคงมีอยู่
ใช้revert-buffer
หรือrecover-file
เพื่อกู้คืนไฟล์บันทึกอัตโนมัติ โปรดทราบว่า Emacs บันทึกการประชุมขัดจังหวะสำหรับการกู้คืนในภายหลังในชื่อไฟล์~ / .emacs.d / อัตโนมัติบันทึกรายการ recover-session
ฟังก์ชั่นจะใช้ข้อมูลนี้
M-x revert-buffer RET
วิธีการที่ต้องการจะกู้คืนจากบันทึกไว้โดยอัตโนมัติจะยื่น Emacs จะถามว่า "บัฟเฟอร์ถูกบันทึกอัตโนมัติเมื่อเร็ว ๆ นี้เปลี่ยนกลับจากไฟล์บันทึกอัตโนมัติหรือไม่" หรือ "เปลี่ยนกลับบัฟเฟอร์จากไฟล์ FILENAME?" ในกรณีหลังไม่มีไฟล์บันทึกอัตโนมัติ ตัวอย่างเช่นเนื่องจากคุณได้บันทึกไว้ก่อนที่จะพิมพ์การauto-save-intervall
กดแป้นอื่นซึ่งในกรณีนี้ Emacs ได้ลบไฟล์บันทึกอัตโนมัติ
ปัจจุบันการบันทึกอัตโนมัติถูกปิดใช้งานตามค่าเริ่มต้นเนื่องจากสามารถชะลอการแก้ไขเมื่อเชื่อมต่อกับเครื่องช้าและเนื่องจากไฟล์จำนวนมากมีข้อมูลที่ละเอียดอ่อน
องค์ประกอบ
นี่คือการกำหนดค่าที่ IMHO ทำงานได้ดีที่สุด:
(defvar --backup-directory (concat user-emacs-directory "backups"))
(if (not (file-exists-p --backup-directory))
(make-directory --backup-directory t))
(setq backup-directory-alist `(("." . ,--backup-directory)))
(setq make-backup-files t ; backup of a file the first time it is saved.
backup-by-copying t ; don't clobber symlinks
version-control t ; version numbers for backup files
delete-old-versions t ; delete excess backup files silently
delete-by-moving-to-trash t
kept-old-versions 6 ; oldest versions to keep when a new numbered backup is made (default: 2)
kept-new-versions 9 ; newest versions to keep when a new numbered backup is made (default: 2)
auto-save-default t ; auto-save every buffer that visits a file
auto-save-timeout 20 ; number of seconds idle time before auto-save (default: 30)
auto-save-interval 200 ; number of keystrokes between auto-saves (default: 300)
)
ข้อมูลที่ละเอียดอ่อน
ปัญหาอีกประการหนึ่งคือคุณไม่ต้องการให้ Emacs กระจายสำเนาของไฟล์ที่มีข้อมูลที่ละเอียดอ่อน ใช้โหมดนี้แบบต่อไฟล์ sensitive-minor-mode
เช่นนี้เป็นโหมดย่อยสำหรับวัตถุประสงค์ของฉันฉันเปลี่ยนชื่อเป็น
เมื่อต้องการเปิดใช้งานสำหรับ. vcfทั้งหมดและไฟล์. gpgทั้งหมดใน. emacของคุณให้ใช้สิ่งต่อไปนี้:
(setq auto-mode-alist
(append
(list
'("\\.\\(vcf\\|gpg\\)$" . sensitive-minor-mode)
)
auto-mode-alist))
อีกวิธีหนึ่งคือปกป้องไฟล์บางไฟล์เช่นบางไฟล์ ไฟล์. txtไฟล์ให้ใช้บรรทัดดังนี้
// -*-mode:asciidoc; mode:sensitive-minor; fill-column:132-*-
ในไฟล์