คุณจะโหลดตัวแปรไดเรกทอรีท้องถิ่นได้อย่างไร ฉันต้องการแก้ไข.dir-locals.el
และมีการเปลี่ยนแปลงดังกล่าวกับเซสชัน Emacs ปัจจุบัน
คุณจะโหลดตัวแปรไดเรกทอรีท้องถิ่นได้อย่างไร ฉันต้องการแก้ไข.dir-locals.el
และมีการเปลี่ยนแปลงดังกล่าวกับเซสชัน Emacs ปัจจุบัน
คำตอบ:
ฟังก์ชั่นนี้จะอ่านไฟล์ dir-locals อีกครั้งและตั้งค่าใหม่สำหรับบัฟเฟอร์ปัจจุบัน:
(defun my-reload-dir-locals-for-current-buffer ()
"reload dir locals for the current buffer"
(interactive)
(let ((enable-local-variables :all))
(hack-dir-local-variables-non-file-buffer)))
และถ้าคุณต้องการโหลด dir-locals สำหรับทุกบัฟเฟอร์ในไดเรกทอรีบัฟเฟอร์ปัจจุบันของคุณ:
(defun my-reload-dir-locals-for-all-buffer-in-this-directory ()
"For every buffer with the same `default-directory` as the
current buffer's, reload dir-locals."
(interactive)
(let ((dir default-directory))
(dolist (buffer (buffer-list))
(with-current-buffer buffer
(when (equal default-directory dir))
(my-reload-dir-locals-for-current-buffer)))))
คุณสามารถให้ dir locals รีเฟรชทุกครั้งที่คุณบันทึกไฟล์ dir-locals โดยการเพิ่มafter-save-hook
บัฟเฟอร์. dir-locals.el
(add-hook 'emacs-lisp-mode-hook
(defun enable-autoreload-for-dir-locals ()
(when (and (buffer-file-name)
(equal dir-locals-file
(file-name-nondirectory (buffer-file-name))))
(add-hook (make-variable-buffer-local 'after-save-hook)
'my-reload-dir-locals-for-all-buffer-in-this-directory))))
ของหลักสูตรนี้อาจมีผลที่ไม่ตั้งใจเพราะมันจะรีเซ็ตค่าตัวแปรโดยไม่คำนึงว่าพวกเขามีการเปลี่ยนแปลงที่อื่นดังนั้นใช้ความเสี่ยงของคุณเอง
คุณยังสามารถใช้: M-: (hack-dir-local-variables-non-file-buffer)
ในการตรวจสอบการทำงาน : จากบัฟเฟอร์ (เช่นไฟล์โหมด org) ให้พิมพ์M-x add-dir-local-variable
จากนั้นตรวจสอบความถูกต้อง (โหมดองค์กรเริ่มต้น) จากนั้นพิมพ์ demo RET จากนั้น "นี่คือตัวอย่าง" RET
ไฟล์. dir-locals.elของคุณจะปรากฏในบัฟเฟอร์:
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((org-mode
(demo . "this is a demo")))
คุณต้องบันทึก: C-x C-s
จากนั้นกลับไปที่บัฟเฟอร์โหมดองค์กรของคุณและตรวจสอบว่าไม่ได้กำหนดตัวแปรสาธิต ( C-h C-v demo
)
ที่นี่คุณสามารถใช้เคล็ดลับ: M-: (hack-dir-local-variables-non-file-buffer)
ตอนนี้C-h C-v demo
จะพิมพ์:
ค่าของตัวอย่างคือ "นี่คือตัวอย่าง" Local in buffer poub.org; เป็นโมฆะทั่วโลก
ค่าของตัวแปรนี้เป็นไดเรกทอรีท้องถิ่นกำหนดโดยไฟล์
'/home/picaud/Temp/.dir-locals.el'เอกสารประกอบ: ไม่มีเอกสารเป็นตัวแปร
buffer-list
ดังนั้นวิธีการหนึ่งถ้าคุณจะปรับกับการคืนค่าบัฟเฟอร์เปิดของคุณจะเป็นเพียงแค่ย้อนกลับทั้งหมดของพวกเขาโดยการทำงานผ่าน