Làm thế nào để bạn tải lại các biến thư mục-cục bộ? Tôi muốn sửa đổi một .dir-locals.el
và áp dụng những thay đổi như vậy cho phiên Emacs hiện tại.
Làm thế nào để bạn tải lại các biến thư mục-cục bộ? Tôi muốn sửa đổi một .dir-locals.el
và áp dụng những thay đổi như vậy cho phiên Emacs hiện tại.
Câu trả lời:
Hàm này sẽ đọc lại tệp dir-locals và đặt các giá trị mới cho bộ đệm hiện tại:
(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)))
Và nếu bạn muốn tải lại thư mục cục bộ cho mọi bộ đệm trong thư mục bộ đệm hiện tại của bạn:
(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)))))
Bạn có thể có tất cả các thư mục cục bộ làm mới mỗi khi bạn lưu tệp thư mục cục bộ bằng cách thêm after-save-hook
bộ đệm vào .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))))
Tất nhiên điều này có thể có những hậu quả không lường trước được vì nó sẽ đặt lại các giá trị biến bất kể chúng có bị thay đổi ở nơi khác hay không, vì vậy hãy tự chịu rủi ro khi sử dụng.
Bạn cũng có thể dùng: M-: (hack-dir-local-variables-non-file-buffer)
Để kiểm tra nó hoạt động : từ bộ đệm (ví dụ: tệp chế độ org), nhập M-x add-dir-local-variable
, sau đó xác thực (chế độ org mặc định), sau đó nhập RET demo, sau đó "đây là RET demo".
Tệp .dir-locals.el của bạn sẽ xuất hiện trong bộ đệm:
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((org-mode
(demo . "this is a demo")))
Bạn phải lưu nó: C-x C-s
Sau đó quay lại bộ đệm chế độ org của bạn và kiểm tra xem biến demo không được xác định ( C-h C-v demo
)
Tại đây bạn có thể sử dụng mẹo: M-: (hack-dir-local-variables-non-file-buffer)
Bây giờ C-h C-v demo
sẽ in:
giá trị của bản demo là "đây là bản demo" Local in buffer poub.org; khoảng trống toàn cầu
Giá trị của biến này là thư mục cục bộ, được đặt bởi tệp
'/home/picaud/Temp/.dir-locals.el'.Tài liệu: Không được ghi nhận dưới dạng một biến.
buffer-list
.