ฉันได้รับ "อาร์กิวเมนต์ผิดประเภท: commandp, (lambda nil (forward-line 5))" ที่นี่
(global-set-key [?\M-n] (lambda () (forward-line 5)))
ข้อผิดพลาดคืออะไร? ฉันค่อนข้างแน่ใจว่ามันเรียบง่ายและฉันพลาดบางอย่างที่ชัดเจน
ฉันได้รับ "อาร์กิวเมนต์ผิดประเภท: commandp, (lambda nil (forward-line 5))" ที่นี่
(global-set-key [?\M-n] (lambda () (forward-line 5)))
ข้อผิดพลาดคืออะไร? ฉันค่อนข้างแน่ใจว่ามันเรียบง่ายและฉันพลาดบางอย่างที่ชัดเจน
คำตอบ:
global-set-key
ต้องการคำสั่งแบบโต้ตอบ (lambda () (interactive) (forward-line 5))
ควรจะทำงาน
อย่างไรก็ตามC-h f commandp
เป็นจุดเริ่มต้นที่ดีสำหรับข้อผิดพลาดเช่นนั้น
(commandp)
เอกสารประกอบฟังก์ชันแลมบ์ดาที่มีการเรียกระดับบนสุดให้(interactive)
ทำงาน แต่ฉันจะกำหนดฟังก์ชัน(defun)
ที่ใช้งานได้อย่างไร
แบบฟอร์มที่ถูกต้องควรเป็นแบบนี้ -
(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))
ปัญหาคือคุณลืมใส่ (interactive)
(ตามที่เบรนแดนพูดถึง)
คุณจะสังเกตเห็นว่าฉันใช้(kbd)
ฟังก์ชันสำหรับระบุการผูกคีย์ ฟังก์ชั่นนั้นมีประโยชน์อย่างมากเนื่องจากคุณสามารถใส่การเชื่อมโยงคีย์ได้เกือบตามตัวอักษร
ฉันยังเห็นข้อผิดพลาดนี้ในเครื่องใหม่ที่ฉันใช้.emacs
ไฟล์ปกติแต่ยังไม่ได้ติดตั้งแพ็คเกจและคำสั่งที่จะดำเนินการอยู่ในหนึ่งในแพ็คเกจเหล่านั้น (เนื่องจากคำสั่งที่ไม่สามารถดำเนินการได้จึงไม่สามารถโต้ตอบได้!)