簡體   English   中英

更改后如何重新加載.emacs?

[英]How can I reload .emacs after changing it?

如何才能使Emacs重新加載在.emacs更新的所有定義,而無需重新啟動Emacs?

您可以使用命令load-file( Mx load-file ,然后按兩次return鍵以接受默認文件名,即正在編輯的當前文件)。

您也可以將點移動到任何sexp的末尾,然后按Cx Ce僅執行該sexp。 通常,如果只更改一兩行,則不必重新加載整個文件。

很奇怪,很方便

MX eval-buffer

這里沒有提到。

如果您的.emacs是冪等的,它將立即評估緩沖區中的所有代碼,這是最快的方法。

通常,您只需重新評估更改的區域即可。 標記已更改的〜/ .emacs區域,然后使用Mx eval-region RET 這通常比重新評估整個文件更安全,因為編寫.emacs文件很容易,該文件在兩次加載后無法正常工作。

如果您在當前活動的緩沖區中打開了.emacs文件,請執行以下操作:

M-x eval-buffer
M-x load-file
~/.emacs

以下應該做...

M-x load-file

其他人已經按照您的說明回答了您的問題,但是我發現我通常想執行我剛剛編寫的行。 為此,在Lisp中按Ctrl Alt x可以正常工作。

鍵盤快捷鍵:

(defun reload-init-file ()
  (interactive)
  (load-file user-init-file))

(global-set-key (kbd "C-c C-l") 'reload-init-file)    ; Reload .emacs file

M- :( (load user-init-file)


筆記

  • 您在Eval:提示符下鍵入它(包括括號)
  • user-init-file是一個變量,默認情況下保存~/.emacs值(指向配置文件路徑)
  • (load)(load-file)較短,較舊且非交互式的版本; 它不是emacs命令(將在Mx中鍵入),而僅僅是elisp函數

結論

M-: > Mx

C-x C-e ;; current line
M-x eval-region ;; region
M-x eval-buffer ;; whole buffer
M-x load-file ~/.emacs.d/init.el

我建議您一開始不要這樣做。 相反,請啟動一個新的emacs會話並測試您所做的任何更改以查看它們是否正常運行。 這樣做的原因是避免使您處於無法操作的.emacs文件狀態,該文件無法加載或無法干凈加載。 如果您在原始會話中進行了所有編輯,而在新會話中進行了所有測試,則始終可以得到可靠的注釋掉有害代碼的工具。

當您最后對更改感到滿意時,請繼續使用其他答案之一重新加載。 我個人的喜好是僅eval您已添加/更改的部分,然后僅突出顯示已添加/更改的代碼Mx eval-region並調用Mx eval-region 如luapyad所指出的那樣,這樣做可以最大程度地減少所評估的代碼,從而最大程度地減少任何意外的副作用。

我目前正在使用Ubuntu 15.04; 我喜歡為此定義一個密鑰。
[M-插入]轉換為鍵盤上的alt-插入。
將其放在您的.emacs文件中:

(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))

在您的初始化文件中定義它,並通過Mx reload-user-init-file調用

(defun reload-user-init-file()
  (interactive)
  (load-file user-init-file))

這是一種快速簡便的方法來快速測試您的配置。 您還可以在特定Lisp的末尾使用Cx Ce來單獨執行某些功能。

Cx Ce運行命令eval-last-sexp(在global-map中找到),它是一個交互式的已編譯Lisp函數。

它綁定到Cx Ce。

(eval-last-exp EVAL-LAST-SEXP-ARG-INTERNAL)

先評估性愛; 回顯區域中的打印值。 使用prefix參數交互地將輸出打印到當前緩沖區中。

通常,此函數根據變量'eval-expression-print-length'和'eval-expression-print-level'的值截斷長輸出。 但是,如果前綴參數為零,則不存在這種截斷。 這樣的前綴參數還會使整數以幾種其他格式(八進制,十六進制和字符)打印。

如果“ eval-expression-debug-on-error”為非零(缺省值),則此命令安排所有錯誤進入調試器。

除了Mx eval-bufferMx加載文件之類的命令之外,您還可以從命令行重新啟動新的emacs:

emacs -q --load "init.el"

用法示例stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/

盡管Mx eval-buffer可以工作,但是您可能會遇到切換和其他類似問題。 更好的方法可能是“標記”或突出顯示.emacs中的新內容(如果只是弄亂甚至是暫存緩沖區),然后是Mx eval-region 希望這可以幫助。

您可以像這樣為emacs設置鍵綁定

;; reload emacs configuration
(defun reload-init-file ()
  (interactive)
  (load-file "~/.emacs"))

(global-set-key (kbd "C-c r") 'reload-init-file) 

希望這會有所幫助!

如果您碰巧在Emacs中打開了外殼,您還可以執行以下操作:

. ~/.emacs

可以節省一些按鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM