Làm cách nào tôi có thể tải Emacs để tải lại tất cả các định nghĩa mà tôi đã cập nhật .emacs
mà không cần khởi động lại Emacs?
Làm cách nào tôi có thể tải Emacs để tải lại tất cả các định nghĩa mà tôi đã cập nhật .emacs
mà không cần khởi động lại Emacs?
Câu trả lời:
Bạn có thể sử dụng lệnh tải tệp ( M-x load-file
sau đó nhấn return hai lần để chấp nhận tên tệp mặc định, đây là tệp hiện tại đang được chỉnh sửa).
Bạn cũng có thể di chuyển điểm đến cuối của bất kỳ sexp nào và nhấn C-xC-eđể thực hiện sexp đó. Thông thường, không cần thiết phải tải lại toàn bộ tệp nếu bạn chỉ thay đổi một hoặc hai dòng.
defun
hoặc defvar
, bạn cũng có thể để nó bên trong phần khai báo và nhập C-M-x
. Rất tiện dụng.
Rất lạ mà rất tiện.
M-x eval-buffer
không được đề cập ở đây.
Nó ngay lập tức đánh giá tất cả các mã trong bộ đệm, đây là phương pháp nhanh nhất, nếu bạn .emacs
là idempotent.
.emacs
là (hoặc phải là) idempotent?
.emacs
là không bình thường?
Bạn thường chỉ có thể đánh giá lại khu vực đã thay đổi. Đánh dấu vùng ~ / .emacs mà bạn đã thay đổi và sau đó sử dụng M-x eval-region RET
. Điều này thường an toàn hơn so với đánh giá lại toàn bộ tệp vì dễ dàng viết tệp .emacs không hoạt động hoàn toàn ngay sau khi được tải hai lần.
Nếu bạn đã mở tệp .emacs của mình trong bộ đệm hiện đang hoạt động:
Mx eval-đệm
M-x load-file
~/.emacs
M-: (load user-init-file)
Eval:
nhanh chóng (bao gồm cả dấu ngoặc đơn)user-init-file
là một biến giữ ~/.emacs
giá trị (trỏ đến đường dẫn tệp cấu hình) theo mặc định(load)
là phiên bản ngắn hơn, cũ hơn và không tương tác (load-file)
; nó không phải là một lệnh emacs (được gõ vào M-x) mà chỉ là một chức năng elispM-:
> M-x
Những người khác đã trả lời câu hỏi của bạn như đã nêu, nhưng tôi thấy rằng tôi thường muốn thực hiện các dòng mà tôi vừa viết. cho rằng, CtrlAltxtrong lisp hoạt động tốt.
eval-lastsexp
, tạiC-x C-e
C-M-x
, bạn không cần phải "ở cuối cùng" - bạn có nghĩ đến C-x C-e
không? Điều thú vị C-M-x
là bạn có thể gọi nó ngay cả khi điểm nằm ở giữa một khai báo hàm / biến.
Tôi đề nghị rằng bạn không làm điều này, ban đầu. Thay vào đó, hãy bắt đầu một phiên emacs mới và kiểm tra bất kỳ thay đổi nào bạn đã thực hiện để xem chúng có hoạt động chính xác không. Lý do để làm theo cách này là để tránh để bạn ở trạng thái bạn có tệp .emacs không thể hoạt động, không tải được hoặc không tải sạch. Nếu bạn thực hiện tất cả các chỉnh sửa của mình trong phiên ban đầu và tất cả các thử nghiệm của bạn trong một phiên mới, bạn sẽ luôn có thứ gì đó đáng tin cậy để nhận xét mã vi phạm.
Khi bạn cuối cùng hài lòng với những thay đổi của mình, hãy tiếp tục và sử dụng một trong những câu trả lời khác để tải lại. Sở thích cá nhân của tôi là eval
chỉ phần bạn đã thêm / thay đổi và để làm điều đó chỉ làm nổi bật vùng mã được thêm / thay đổi và cuộc gọi M-x eval-region
. Làm như vậy sẽ giảm thiểu mã được đánh giá, giảm thiểu bất kỳ tác dụng phụ không chủ ý nào, như luaccoad chỉ ra.
Phim tăt:
(defun reload-init-file ()
(interactive)
(load-file user-init-file))
(global-set-key (kbd "C-c C-l") 'reload-init-file) ; Reload .emacs file
Tôi hiện đang sử dụng Ubuntu 15.04; Tôi muốn xác định một chìa khóa cho việc này.
[M-insert] dịch sang chèn alt trên bàn phím của tôi.
Đặt cái này trong tệp .emacs của bạn:
(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))
Xác định nó trong tệp init của bạn và gọi bằng Mx reload-user-init-file
(defun reload-user-init-file()
(interactive)
(load-file user-init-file))
Mặc dù M-x eval-buffer
sẽ hoạt động nhưng bạn có thể gặp vấn đề với toggles và những thứ tương tự khác. Cách tiếp cận tốt hơn có thể là "đánh dấu" hoặc làm nổi bật những gì mới trong .emacs của bạn (hoặc thậm chí là bộ đệm đầu nếu bạn chỉ loay hoay) và sau đó M-x eval-region
. Hi vọng điêu nay co ich.
Đây là một cách nhanh chóng và dễ dàng để kiểm tra nhanh cấu hình của bạn. Bạn cũng có thể sử dụng C-x C-e
ở cuối lisp cụ thể để thực hiện chức năng nhất định riêng lẻ.
Cx Ce chạy lệnh eval-last-sexp (được tìm thấy trong bản đồ toàn cầu), đây là một hàm Lisp được biên dịch tương tác.
Nó bị ràng buộc với Cx Ce.
(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)
Đánh giá sexp trước điểm; giá trị in trong khu vực tiếng vang. Tương tác, với đối số tiền tố, in đầu ra vào bộ đệm hiện tại.
Thông thường, hàm này cắt ngắn đầu ra dài theo giá trị của các biến 'eval-express-print-length' và 'eval-express-print-level'. Tuy nhiên, với một đối số tiền tố bằng 0, không có sự cắt bớt như vậy. Đối số tiền tố như vậy cũng khiến số nguyên được in ở một số định dạng bổ sung (bát phân, thập lục phân và ký tự).
Nếu 'eval-express-debug-on-error' không phải là con số không, đó là mặc định, lệnh này sắp xếp cho tất cả các lỗi để vào trình gỡ lỗi.
Bên cạnh các lệnh như Mx eval-buffer hoặc Mx load-file, bạn có thể khởi động lại một emacs mới từ dòng lệnh:
emacs -q --load "init.el"
Ví dụ sử dụng stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
Bạn có thể đặt ràng buộc khóa cho emacs như thế này
;; reload emacs configuration
(defun reload-init-file ()
(interactive)
(load-file "~/.emacs"))
(global-set-key (kbd "C-c r") 'reload-init-file)
Hy vọng điều này sẽ giúp!