"อาร์กิวเมนต์ผิดประเภท: commandp" เกิดข้อผิดพลาดเมื่อผูกแลมบ์ดากับคีย์


88

ฉันได้รับ "อาร์กิวเมนต์ผิดประเภท: commandp, (lambda nil (forward-line 5))" ที่นี่

(global-set-key [?\M-n] (lambda () (forward-line 5)))

ข้อผิดพลาดคืออะไร? ฉันค่อนข้างแน่ใจว่ามันเรียบง่ายและฉันพลาดบางอย่างที่ชัดเจน


คุณไม่มีวงเล็บปิด อาจไม่ได้อยู่ในรหัสของคุณ แต่ในคำถามเท่านั้น
Helder S Ribeiro

หมายเหตุด้านข้าง: เมื่อคุณอ้างถึงฟังก์ชันที่ไม่ระบุตัวตนเช่นนั้นจะไม่ถูกคอมไพล์ ฉันคิดว่ามันไม่ใช่เรื่องใหญ่ในกรณีของคุณ
Phil Jackson

คำตอบ:


130

global-set-keyต้องการคำสั่งแบบโต้ตอบ (lambda () (interactive) (forward-line 5))ควรจะทำงาน

อย่างไรก็ตามC-h f commandpเป็นจุดเริ่มต้นที่ดีสำหรับข้อผิดพลาดเช่นนั้น


ฉันคิดว่าไม่มีด้านล่าง จากเอกสารประกอบ: >> "call" to "interactive" เป็นการประกาศแทนที่จะเป็นฟังก์ชัน จะบอกวิธีการอ่านอาร์กิวเมนต์เพื่อส่งผ่านไปยังฟังก์ชัน เมื่อเรียกจริง 'โต้ตอบ' จะส่งกลับศูนย์
Dangelov

ตาม(commandp)เอกสารประกอบฟังก์ชันแลมบ์ดาที่มีการเรียกระดับบนสุดให้(interactive)ทำงาน แต่ฉันจะกำหนดฟังก์ชัน(defun)ที่ใช้งานได้อย่างไร
peterhil

36

แบบฟอร์มที่ถูกต้องควรเป็นแบบนี้ -

(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))

ปัญหาคือคุณลืมใส่ (interactive) (ตามที่เบรนแดนพูดถึง)

คุณจะสังเกตเห็นว่าฉันใช้(kbd)ฟังก์ชันสำหรับระบุการผูกคีย์ ฟังก์ชั่นนั้นมีประโยชน์อย่างมากเนื่องจากคุณสามารถใส่การเชื่อมโยงคีย์ได้เกือบตามตัวอักษร


2

ฉันยังเห็นข้อผิดพลาดนี้ในเครื่องใหม่ที่ฉันใช้.emacsไฟล์ปกติแต่ยังไม่ได้ติดตั้งแพ็คเกจและคำสั่งที่จะดำเนินการอยู่ในหนึ่งในแพ็คเกจเหล่านั้น (เนื่องจากคำสั่งที่ไม่สามารถดำเนินการได้จึงไม่สามารถโต้ตอบได้!)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.