@Malabarba พูดถึงการใช้wgrepแพคเกจสำหรับการแก้ไขผลลัพธ์ grep / ack / ag
ฉันต้องการเขียนรายละเอียดวิธีใช้agแพคเกจและwgrep-agแพ็คเกจเพื่อให้ได้การแก้ไข 'ผลลัพธ์ ag'ged โดยใช้multiple-cursorsแพ็คเกจ
แพ็คเกจเหล่านี้มีให้บริการผ่าน Melpa คุณต้องติดตั้งagaka the_silver_searcherบนระบบของคุณ
การแนะนำแบบนี้นำไปใช้กับกรณีที่คุณกำลังมองหาวิธีการแก้ไขบรรทัดเดียวในทุกสถานที่ / ที่เลือกที่agพบ
ติดตั้งagบนระบบของคุณและแพ็คเกจ emacs ที่กล่าวถึงข้างต้น
agรองรับการค้นหาไฟล์ที่มีเนื้อหาที่ตรงกับ regex ที่คุณระบุ วิธีที่ง่ายที่สุดในการบอกagตำแหน่งของรูทโปรเจ็กต์เพื่อวาง.gitโฟลเดอร์ว่างไว้ที่นั่น M-x ag-project-regexpจากนั้นทำการค้นหาโดยใช้
บัฟเฟอร์ผลลัพธ์ของการค้นหา ag ไม่สามารถแก้ไขได้โดยค่าเริ่มต้น เพื่อให้สามารถแก้ไขได้ทำM-x wgrep-change-to-wgrep-modeหรือใช้wgrep-default C-c C-pผูกพัน
ตอนนี้หากคุณต้องการเปลี่ยน 'abcdef' เป็น 'ghijkl' ในไฟล์ทั้งหมดของคุณคุณจะต้องค้นหา 'abcdef' และบัฟเฟอร์ผลลัพธ์ ag จะแสดงบรรทัดทั้งหมดที่มีสตริงนั้น แล้วคุณทำที่บัฟเฟอร์ที่สามารถแก้ไขได้และเปลี่ยนสายเหล่านั้นด้วยตนเองและการเปลี่ยนแปลงเหล่านั้นจะสะท้อนให้เห็นในบัฟเฟอร์ไฟล์จริงในการทำหรือใช้ค่าเริ่มต้นที่มีผลผูกพันM-x wgrep-finish-edit C-c C-eคุณยังสามารถใช้query-replace-regexpเพื่อทำการค้นหาแทน
ฉันชอบที่จะใช้multiple-cursorsสำหรับการปรับโครงสร้างใหม่อย่างรวดเร็วเพื่อที่ฉันจะได้เห็นข้อเสนอแนะแบบเรียลไทม์ว่ามีการแก้ไขหลายรายการพร้อมกันที่ไหน เน้นสตริงที่คุณต้องการแทนที่ในบัฟเฟอร์ผลลัพธ์ ag และการโทรM-x mc/mark-all-like-thisแล้วแก้ไขออกไปอย่างน่าเกรงขามในขณะที่คุณเห็นสิ่งต่าง ๆ ที่ได้รับการแก้ไขในหลายจุดในเวลาเดียวกัน
เมื่อคุณพอใจกับการแก้ไขดังที่ได้กล่าวมาแล้วให้ทำC-c C-e"สะท้อน" การเปลี่ยนแปลงในบัฟเฟอร์จริง ยังไม่ได้บันทึกบัฟเฟอร์
เพื่อบันทึกบัฟเฟอร์ทั้งหมดฉันมักจะทำในครั้งเดียวโดยใช้การC-x s !ผูกemacs เริ่มต้น
นี่คือตัวอย่างการใช้งานที่มีหน้าจอตัวอย่าง:
มันแสดงให้เห็นกระบวนการของการเปลี่ยนทุกกรณีของbind-to-modi-mapการในของฉันbind-to-my-map~/.emacs.d/
เมื่อฉันค้นหาbind-to-modi-mapในโฟลเดอร์การตั้งค่า emacs ของฉันฉันได้ผลลัพธ์ ag'ged ด้านล่าง:
บัฟเฟอร์นี้เป็นแบบอ่านอย่างเดียว
หลังจากนั้นM-x wgrep-change-to-wgrep-modeฉันไฮไลต์ให้-modi-mapเลือกอินสแตนซ์ทั้งหมดของการเลือกที่ใช้M-x mc/mark-all-like-thisและหลังจากแก้ไขการเลือกเหล่านั้น-my-mapแล้วจะมีลักษณะดังนี้:

C-c C-eสีฟ้าแสดงไฮไลท์ซึ่งเส้นจะถูกแก้ไขเมื่อกด
เมื่อกดปุ่มC-c C-eคุณจะเห็นการเปลี่ยนแปลงที่ปรากฏในไฟล์จริงในภาพหน้าจอนี้:

C-x s !ฉันก็จะบันทึกไฟล์ทั้งหมดที่แก้ไขได้โดยใช้