@Malabarba พูดถึงการใช้wgrep
แพคเกจสำหรับการแก้ไขผลลัพธ์ grep / ack / ag
ฉันต้องการเขียนรายละเอียดวิธีใช้ag
แพคเกจและwgrep-ag
แพ็คเกจเพื่อให้ได้การแก้ไข 'ผลลัพธ์ ag'ged โดยใช้multiple-cursors
แพ็คเกจ
แพ็คเกจเหล่านี้มีให้บริการผ่าน Melpa คุณต้องติดตั้งag
aka 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 !
ฉันก็จะบันทึกไฟล์ทั้งหมดที่แก้ไขได้โดยใช้