ฉันจะสร้างโครงสร้างใหม่ในโครงการใน emacs ได้อย่างไร (เปลี่ยนชื่อวิธีทุกที่)


15

ฉันต้องการเขียนส่วนของโครงการ opensource อีกครั้ง ซึ่งรวมถึงวิธีการเปลี่ยนชื่อ ฉันจะทำอย่างมีประสิทธิภาพใน emacs ทั่วทั้งโครงการได้อย่างไร

ฉันจะไม่ใช้แฮ็กเช่นการค้นหาและแทนที่ในทุกบัฟเฟอร์


1
ภาษาไหน?
phils

คุณดูที่ ag / grep + wgrep + search / replace หรือไม่ คุณไม่ได้เปิดบัฟเฟอร์แยกต่างหาก ที่เกี่ยวข้อง: emacs.stackexchange.com/a/243/115
Kaushal Modi

หลาม ฉันรู้ว่าคำถามของฉันไม่ได้ดีที่สุดขอโทษ
Cat Unfun

เนื่องจากคำถามนี้ถูกกระแทกไปด้านบน (ในกรณีที่ใครก็ตามที่สะดุดจาก Google) จึงมีห้องสมุดหลามสำหรับการปรับโครงสร้างที่เรียกว่าเชือก มันฉลาดกว่าโซลูชันอื่น ๆ ที่นำเสนอเนื่องจากคำนึงถึงบริบท มันถูกนำมาใช้ใน Emacs ropemacsในแพคเกจที่เรียกว่า
jcaw

@TheUnfunCat คุณสามารถเพิ่มบริบทเพิ่มเติมให้กับคำถามของคุณได้หรือไม่? ณ ตอนนี้มันค่อนข้างคลุมเครือและการเพิ่มที่คุณต้องการทำในโปรเจ็กต์หลามจะช่วยแก้ปัญหาได้หลายอย่าง
DoMiNeLa10

คำตอบ:


14

ตอนนี้ฉันใช้helm-agเพื่อค้นหาอินสแตนซ์ทั้งหมดของชื่อฟังก์ชั่น (ค้นหาในไฟล์ทั้งหมดรวมถึง subdirs ไม่ใช่เฉพาะในบัฟเฟอร์เปิด) จากนั้นฉันใช้C-c C-eเพื่อป้อนบัฟเฟอร์ที่แสดงรายการที่ตรงกันทั้งหมดและฉันเปลี่ยนชื่อฟังก์ชัน เมื่อฉันทำฉันกดC-c C-c (helm-ag--edit-commit)เพื่อจัดเก็บการเปลี่ยนแปลงของไฟล์ที่เปิดทั้งหมด

นี่อาจฟังดูสับสน แต่โปรดดูที่https://github.com/ShingoFukuyama/helm-swoop

เมื่อคุณคร่ำครวญคุณจะร้องไห้ด้วยความปิติยินดีที่มีการใช้งานที่ยอดเยี่ยมเช่นนี้


1
มันทำให้แก้มฉันน้ำตาไหล
mihai

1
แท้จริงมีน้ำตาในดวงตาของฉันเมื่อดำเนินการตามขั้นตอนนี้เป็นครั้งแรกไม่มีการล้อเล่น
Paul

สุดยอดทางออก!
fraxture

6

เนื่องจากคุณไม่ได้ระบุภาษาจึงยากที่จะให้คำตอบที่ดีกว่า "ค้นหาและแทนที่"

ใช้ wgrep

หากคุณเพียงแค่ต้องการ (แบบโต้ตอบ) แทนที่สัญลักษณ์ทั้งหมดด้วยสัญลักษณ์อื่น wgrep คือทางออกที่ดีที่สุดของคุณ ให้คุณแก้ไขบัฟเฟอร์ผลลัพธ์ grep แบบโต้ตอบ

  1. M-x package-install RET wgrepDo
  2. M-x rgrepวิ่ง มันจะถามคำถามง่ายๆสองสามข้อจากนั้นทำการค้นหาคำซ้ำภายในไดเรกทอรีที่คุณระบุ
  3. สลับไปยังผลการค้นหาใน buffer M-x wgrep-change-to-wgrep-modeและทำ บัฟเฟอร์นี้สามารถแก้ไขได้ในขณะนี้ การเปลี่ยนแปลงใด ๆ ที่คุณทำที่นี่จะปรากฏในไฟล์ด้วยตนเอง
  4. เรียกใช้ a replace-regexpหรือ a query-replace-regexpในบัฟเฟอร์นี้เพื่อทำการ refactoring
  5. เสร็จสิ้นการแก้ไขของคุณด้วยและM-x wgrep-save-all-buffersM-x wgrep-finish-edit

3

สำหรับวิธีการทั่วไปบางอย่างให้ดูที่หัวข้อ " แทนที่ข้ามไฟล์ " ในหน้าค้นหา Emacs Wiki & แทนที่: http://www.emacswiki.org/emacs/CategorySearchAndReplace

ดูคำตอบสำหรับ: การใช้ Emacs เพื่อค้นหาและแทนที่ในไฟล์ข้อความที่ไม่ได้เปิดซ้ำ


3

คุณสามารถใช้counsel-rgตามด้วยC-c C-oเพื่อรับรายชื่อผู้สมัครทั้งหมดในบัฟเฟอร์ กดเพื่อแก้ไขพวกเขาด้วยw wgrepฉันแนะนำieditสำหรับการเปลี่ยนชื่อสัญลักษณ์ กดC-c C-cเพื่อยืนยัน

อ้างอิง:

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