ฉันจะให้ Emacs โหลดคำจำกัดความทั้งหมดของฉันที่ฉันอัปเดต.emacs
ใหม่โดยไม่ต้องรีสตาร์ท Emacs ได้อย่างไร
ฉันจะให้ Emacs โหลดคำจำกัดความทั้งหมดของฉันที่ฉันอัปเดต.emacs
ใหม่โดยไม่ต้องรีสตาร์ท Emacs ได้อย่างไร
คำตอบ:
คุณสามารถใช้คำสั่งโหลดไฟล์ ( M-x load-file
จากนั้นกด Return สองครั้งเพื่อยอมรับชื่อไฟล์เริ่มต้นซึ่งเป็นไฟล์ปัจจุบันที่กำลังแก้ไข)
คุณสามารถย้ายจุดไปยังจุดสิ้นสุดของ sexp ใด ๆ แล้วกดC-xC-eเพื่อเรียกใช้ sexp นั้น โดยปกติแล้วมันไม่จำเป็นต้องทำการรีโหลดไฟล์ทั้งหมดหากคุณเพียงแค่เปลี่ยนบรรทัดหรือสองไฟล์
defun
หรือคุณยังสามารถปล่อยให้มันอยู่ภายในร่างกายประกาศและประเภทdefvar
C-M-x
มีประโยชน์มาก
แปลกมากที่สะดวกมาก
M-x eval-buffer
ไม่ได้กล่าวถึงที่นี่
มันจะประเมินโค้ดทั้งหมดในบัฟเฟอร์ทันทีซึ่งเป็นวิธีที่เร็วที่สุดหากคุณ.emacs
เป็น idempotent
.emacs
คือ (หรือจะต้องเป็น) idempotent?
.emacs
ไม่ควรเป็น idempotent?
โดยปกติคุณสามารถประเมินภูมิภาคที่เปลี่ยนแปลงได้อีกครั้ง ทำเครื่องหมายภูมิภาค ~ / .emacs M-x eval-region RET
ที่คุณได้เปลี่ยนแปลงและการใช้งานแล้ว วิธีนี้มักจะปลอดภัยกว่าการประเมินไฟล์ทั้งหมดอีกครั้งเนื่องจากง่ายต่อการเขียนไฟล์. emacs ที่ไม่ทำงานค่อนข้างถูกต้องหลังจากโหลดสองครั้ง
หากคุณเปิดไฟล์. emacs ไว้ในบัฟเฟอร์ที่ใช้งานอยู่ในปัจจุบัน:
Mx eval-buffer
M-x load-file
~/.emacs
ต่อไปนี้ควรทำ ...
M-x load-file
M-: (load user-init-file)
Eval:
พรอมต์ (รวมถึงวงเล็บ)user-init-file
เป็นตัวแปรที่เก็บ ~/.emacs
ค่า (ชี้ไปที่พา ธ ของไฟล์การกำหนดค่า) โดยค่าเริ่มต้น(load)
มีขนาดสั้นลงเก่ากว่าและไม่ใช่แบบโต้ตอบของ(load-file)
; มันไม่ได้เป็นคำสั่ง emacs (ที่จะพิมพ์M-x) แต่ฟังก์ชั่นเพียงแค่ elispM-:
> M-x
คนอื่นตอบคำถามของคุณตามที่ระบุไว้ แต่ฉันพบว่าฉันมักจะต้องการดำเนินการตามบรรทัดที่ฉันเพิ่งเขียน สำหรับที่CtrlAltxในเสียงกระเพื่อมทำงานได้ดี
eval-lastsexp
ที่C-x C-e
C-M-x
คุณไม่จำเป็นต้องเป็น "ในตอนท้ายของเสียงกระเพื่อม" - คุณกำลังนึกถึงC-x C-e
บางที สิ่งที่ดีเกี่ยวกับC-M-x
คือคุณสามารถเรียกใช้ได้แม้ในขณะที่จุดอยู่ตรงกลางของการประกาศฟังก์ชั่น / ตัวแปร
ฉันขอแนะนำให้คุณไม่ทำเช่นนี้ในตอนแรก ให้เริ่มเซสชัน emacs ใหม่และทดสอบการเปลี่ยนแปลงที่คุณทำเพื่อดูว่ามันทำงานอย่างถูกต้องหรือไม่ เหตุผลในการทำเช่นนี้คือหลีกเลี่ยงการปล่อยให้คุณอยู่ในสถานะที่คุณมีไฟล์. emacs ที่ไม่สามารถใช้งานได้ซึ่งล้มเหลวในการโหลดหรือล้มเหลวในการโหลดอย่างหมดจด หากคุณทำการแก้ไขทั้งหมดในเซสชันต้นฉบับและการทดสอบทั้งหมดของคุณในเซสชันใหม่คุณจะมีสิ่งที่น่าเชื่อถือเสมอในการแสดงความคิดเห็นรหัสที่ละเมิด
เมื่อคุณมีความสุขกับการเปลี่ยนแปลงในที่สุดจากนั้นดำเนินการต่อและใช้หนึ่งในคำตอบอื่น ๆ เพื่อโหลดซ้ำ ความชอบส่วนบุคคลของฉันคือการeval
เพียงส่วนที่คุณได้เพิ่ม / เปลี่ยนแปลงและที่จะทำเพียงแค่เน้นภูมิภาคเพิ่ม / M-x eval-region
รหัสการเปลี่ยนแปลงและการโทร การทำเช่นนี้จะทำให้โค้ดที่ถูกประเมินน้อยที่สุดลดผลข้างเคียงที่ไม่ได้ตั้งใจให้น้อยที่สุดเนื่องจาก luapyad ชี้ให้เห็น
แป้นพิมพ์ลัด:
(defun reload-init-file ()
(interactive)
(load-file user-init-file))
(global-set-key (kbd "C-c C-l") 'reload-init-file) ; Reload .emacs file
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
ฉันใช้ Ubuntu 15.04 อยู่ในขณะนี้ ฉันชอบกำหนดกุญแจสำหรับสิ่งนี้
[M-insert] แปลเป็น alt-insert บนคีย์บอร์ดของฉัน
วางสิ่งนี้ลงในไฟล์. emacs ของคุณ:
(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))
กำหนดไว้ในไฟล์ init ของคุณและโทรหาโดยMx reload-user-init-file
(defun reload-user-init-file()
(interactive)
(load-file user-init-file))
แม้ว่าM-x eval-buffer
จะได้ผลคุณอาจพบปัญหากับการสลับและสิ่งอื่นที่คล้ายคลึงกัน วิธีที่ดีอาจจะมีการ "เครื่องหมาย" หรืออะไรที่ไฮไลท์ใหม่ใน .emacs ของคุณ (หรือแม้กระทั่งรอยขีดข่วนบัฟเฟอร์ถ้าของคุณเพียงแค่ messing รอบ) M-x eval-region
แล้ว หวังว่านี่จะช่วยได้
นี่คือวิธีที่รวดเร็วและง่ายดายในการทดสอบการกำหนดค่าของคุณ นอกจากนี้คุณยังสามารถใช้C-x C-e
ที่ส่วนท้ายของเสียงกระเพื่อมที่เฉพาะเจาะจงเพื่อดำเนินการฟังก์ชั่นบางอย่างเป็นรายบุคคล
Cx Ce รันคำสั่ง eval-last-sexp (พบในแผนที่โลก) ซึ่งเป็นฟังก์ชั่น Lisp ที่คอมไพล์แบบอินเตอร์แอคทีฟ
มันถูกผูกไว้กับ Cx Ce
(eval-last-sexp EVAL-LAST-SEXP-ARG- ภายใน)
ประเมิน sexp ก่อนชี้ ค่าการพิมพ์ในพื้นที่ echo แบบโต้ตอบพร้อมอาร์กิวเมนต์นำหน้าพิมพ์ผลลัพธ์ลงในบัฟเฟอร์ปัจจุบัน
โดยปกติแล้วฟังก์ชั่นนี้จะตัดทอนผลลัพธ์แบบยาวตามค่าของตัวแปร 'eval-expression-print-length' และ 'eval-expression-print-level' อย่างไรก็ตามด้วยคำนำหน้าเป็นศูนย์ แต่ไม่มีการตัดทอน อาร์กิวเมนต์คำนำหน้าดังกล่าวยังทำให้จำนวนเต็มถูกพิมพ์ในหลายรูปแบบเพิ่มเติม (ฐานแปดฐานสิบหกและอักขระ)
หาก 'eval-expression-debug-on-error' เป็น non-nil ซึ่งเป็นค่าเริ่มต้นคำสั่งนี้จะจัดเรียงข้อผิดพลาดทั้งหมดเพื่อเข้าสู่การดีบัก
ข้างคำสั่งเช่นMx eval-bufferหรือMx load-fileคุณสามารถรีสตาร์ท emacs ใหม่จากบรรทัดคำสั่ง:
emacs -q --load "init.el"
ตัวอย่างการใช้งานstackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
คุณสามารถตั้งค่าการผูกคีย์สำหรับ emacs เช่นนี้
;; reload emacs configuration
(defun reload-init-file ()
(interactive)
(load-file "~/.emacs"))
(global-set-key (kbd "C-c r") 'reload-init-file)
หวังว่านี่จะช่วยได้!
หากคุณมีการเปิดเชลล์ภายใน Emacs คุณสามารถทำได้:
. ~/.emacs
อาจบันทึกการกดปุ่มสองสามครั้ง