UPDATE : ฉันสร้างแพ็คเกจSemantic Refactorซึ่งแก้ปัญหานี้ได้อย่างสมบูรณ์และอีกมากมาย คุณสามารถดูการสาธิตเพื่อดูว่ามันทำงานอย่างไร ข้อความที่เหลืออยู่ของคำตอบนี้หลังจากประโยคนี้เก่าและวางไว้ที่นั่นเพื่อเหตุผลทางประวัติศาสตร์เท่านั้น
คำตอบเดิม :
คุณสามารถใช้senator-copy-tag
สำหรับการคัดลอกฟังก์ชั่นลายเซ็นที่ถูกต้องแล้ววางกลับในไฟล์ต้นฉบับของคุณ senator-copy-tag
และคำสั่ง Senator จะพร้อมใช้งานเมื่อคุณเปิดใช้งานsemantic-mode
:
(semantic-mode 1)
Semantic เป็นแพ็คเกจในตัวของ Emacs
คุณสามารถรวม Semantic Senator กับ Projectile ลงในคำสั่งเพื่อแทรกฟังก์ชั่นต้นแบบลงในไฟล์อื่น (ไฟล์ที่มีชื่อเดียวกัน แต่มีนามสกุลต่างกัน) จากทุกที่ในโครงการของคุณ หากมีไฟล์อื่นเพียงไฟล์เดียวคำสั่งจะแทรกลงในไฟล์นั้นทันที หากมีมากกว่าหนึ่งระบบจะขอให้คุณเลือกไฟล์ หากไม่มีคุณจะได้รับแจ้งให้ระบุไฟล์ทั้งหมดในโครงการของคุณ หลังจากคุณเลือกไฟล์แล้วพรอมต์จะเสนอรายการของแท็ก Semantic ในบัฟเฟอร์ปัจจุบันที่คุณสามารถเลือกแทรกหลังจาก
ฉันส่งประชาสัมพันธ์เพื่อEmacs Refactor รหัสเต็มถ้าคุณต้องการที่จะลองโดยไม่ต้องรอการประชาสัมพันธ์: คลิกที่นี่
นี่คือตัวอย่าง (เริ่มต้นเมื่อคุณเห็นSTART DEMO
ที่ด้านล่าง):
คุณสามารถใช้วุฒิสมาชิกเพียงเพื่อคัดลอกและฟังก์ชั่นต้นแบบ ตราบใดที่มีจุดอยู่ภายในฟังก์ชันของลายเซ็นหรือตัวฟังก์ชันให้เรียกใช้senator-copy-tag
ซึ่งถูกผูกไว้กับC-c , M-w
ค่าเริ่มต้นมันจะคัดลอกฟังก์ชันทั้งหมด: ทั้งลายเซ็นและเนื้อความ อย่างไรก็ตามคุณสามารถวางเฉพาะลายเซ็นได้หากคุณต้องการโดยเรียกใช้คำสั่งsenator-yank-tag
ซึ่งถูกผูกไว้C-c , C-y
โดยค่าเริ่มต้น กดC-y
วางลายเซ็นของฟังก์ชั่นทั้งหมดพร้อมกับร่างกายของมัน senator-copy-tag
แม้ใช้งานกับฟังก์ชันลายเซ็นที่ขยายในหลายบรรทัดเช่นนี้
void
func(int a,
int b,
int c)
{
.....
}
แม้ว่าวิธีการนี้จะไม่แทรกลงในบัฟเฟอร์โดยตรงด้วยชื่อเดียวกัน แต่จะมีประโยชน์มากกว่าในกรณีอื่น ๆ กรณีการใช้งานของคุณใช้งานได้หากคุณมีสองไฟล์ในไดเรกทอรีเดียวกันและมีชื่อเดียวกัน แต่มีนามสกุลต่างกัน จะเกิดอะไรขึ้นถ้าการประกาศฟังก์ชันและนิยามฟังก์ชันต้องอยู่ในไฟล์ต่าง ๆ ที่มีชื่อต่างกัน?
EDIT2 : นี่คือตัวอย่างสำหรับการแทรกฟังก์ชันต้นแบบอย่างชาญฉลาดโดยใช้แท็ก Semantic ขณะนี้คุณสามารถแทรกตามตำแหน่งสัมพัทธ์ ("ก่อนหน้า" และ "หลัง") ของแท็ก Semantic ระดับบนสุดเท่านั้น ฉันจะปรับปรุงให้กับผู้ใช้ให้เพื่อให้สามารถใส่ในสถานที่ใดที่แท็กความหมายที่มีอยู่กับตำแหน่งอื่น ๆ (เช่นเมื่อแท็กเป็นClass
ก็ควรมีตำแหน่งเพิ่มเติม: public
, projected
และprivate
) ตัวอย่างเริ่มต้นเมื่อคุณเห็นSTART DEMO
ที่ด้านล่าง:
โบนัส : ถ้าคุณต้องการที่จะสร้างรายการของคำนิยามของฟังก์ชั่นที่ว่างเปล่าใน.cpp
ไฟล์จากไฟล์ส่วนหัวใช้สมาชิก functions.el แต่เร็ว ๆ นี้ฉันจะแทนที่ด้วย Semantic + Projectile