แหล่งที่มาของข้อมูล: 1
สำหรับผู้ใช้ emacs pro:
- โทรไปที่รายชื่อไฟล์ใน dir หรือโทรหาที่ค้นหาถ้าคุณต้องการไดเรกทอรีย่อยทั้งหมด
- ทำเครื่องหมายไฟล์ที่คุณต้องการ คุณสามารถทำเครื่องหมายด้วย regex โดยพิมพ์【% m 】
- พิมพ์ Q เพื่อเรียก dired-do-query-replace-regexp
- พิมพ์ find regex ของคุณและแทนที่สตริง pattern ☛ลวดลาย elex regex ทั่วไป〕
- สำหรับแต่ละเหตุการณ์ที่เกิดขึ้นพิมพ์ y เพื่อแทนที่, n เพื่อข้าม พิมพ์【 Ctrl + g 】เพื่อยกเลิกการทำงานทั้งหมด
- พิมพ์! เพื่อแทนที่สิ่งที่เกิดขึ้นทั้งหมดในไฟล์ปัจจุบันโดยไม่ต้องขอให้ N ข้ามการแทนที่ที่เป็นไปได้ทั้งหมดไปยังไฟล์ปัจจุบันที่เหลือ (N คือ emacs 23 เท่านั้น)
- หากต้องการแทนที่ไฟล์ทั้งหมดโดยไม่ถามเพิ่มเติมให้พิมพ์ Y. (Emacs 23 เท่านั้น)
- โทร ibuffer เพื่อแสดงรายการไฟล์ที่เปิดทั้งหมด พิมพ์【 * u 】เพื่อทำเครื่องหมายไฟล์ที่ไม่ได้บันทึกทั้งหมดพิมพ์ S เพื่อบันทึกไฟล์ที่ทำเครื่องหมายไว้ทั้งหมดพิมพ์ D เพื่อปิดไฟล์ทั้งหมด
คำแนะนำทีละขั้นตอนสำหรับผู้เริ่มต้นใช้งาน Emacs
เลือกไฟล์เป้าหมาย
เริ่ม emacs โดยพิมพ์“ emacs” ในพรอมต์บรรทัดคำสั่ง (หรือดับเบิลคลิกไอคอน Emacs หากคุณอยู่ในสภาพแวดล้อมส่วนติดต่อผู้ใช้แบบกราฟิก)
การเลือกไฟล์ในไดเรกทอรี
ก่อนอื่นคุณต้องเลือกไฟล์ที่คุณต้องการแทนที่ ใช้เมนูกราฟิก〖ไฟล์▸เปิดไดเรกทอรี〗Emacs จะขอเส้นทางไดเรกทอรี พิมพ์เส้นทางไดเรกทอรีจากนั้นกด Enter
ตอนนี้คุณจะเห็นรายการไฟล์และตอนนี้คุณต้องทำเครื่องหมายไฟล์ที่คุณต้องการให้ regex find / replace ทำงาน คุณทำเครื่องหมายไฟล์โดยเลื่อนเคอร์เซอร์ไปยังไฟล์ที่คุณต้องการจากนั้นกด m ยกเลิกการทำเครื่องหมายโดยกด u (ในการแสดงรายการไดเรกทอรีย่อยให้เลื่อนเคอร์เซอร์ไปที่ไดเรกทอรีแล้วกด i เนื้อหาของไดเรกทอรีย่อยจะปรากฏที่ด้านล่าง) หากต้องการทำเครื่องหมายไฟล์ทั้งหมดด้วย regex ให้พิมพ์【% m 】จากนั้นพิมพ์รูปแบบ regex ของคุณ ตัวอย่างเช่นหากคุณต้องการทำเครื่องหมายไฟล์ HTML ทั้งหมดให้พิมพ์【% m 】ตามด้วย. html $ (คุณสามารถค้นหารายการคำสั่งทำเครื่องหมายในเมนูแบบกราฟิก "ทำเครื่องหมาย" (เมนูนี้จะปรากฏขึ้นเมื่อคุณอยู่ในโหมด dired))
การเลือกไฟล์ในไดเรกทอรีและไดเรกทอรีย่อยทั้งหมด
หากคุณต้องการค้นหา / แทนที่ไฟล์ภายในไดเรกทอรีรวมถึงไดเรกทอรีย่อยหลายร้อยรายการต่อไปนี้เป็นวิธีการเลือกไฟล์ทั้งหมดเหล่านี้
โทรหาคนหา (คุณเรียกคำสั่งโดยกด【 Alt + x 】) จากนั้นพิมพ์ชื่อไดเรกทอรี⁖ / Users / mary / myfiles
หมายเหตุ: หากคุณกำลังใช้ emacs บนเทอร์มินัลข้อความที่ไม่ใช่กราฟิกและหาก【 Alt + x 】ไม่ทำงานการกดคีย์ที่เทียบเท่าคือ【 Esc x 】
Emacs จะถามคุณพร้อมท์“ Run find (with args):” หากคุณต้องการแทนที่ไฟล์ HTML ทั้งหมดให้พิมพ์ -name "* html" หากคุณไม่สนใจว่าไฟล์ประเภทใด แต่เพียงแค่ไฟล์ทั้งหมดภายใต้ dir นั้นให้“ -type f”
ตอนนี้ทำเครื่องหมายไฟล์ตามที่อธิบายไว้ข้างต้น
ค้นหา / แทนที่แบบโต้ตอบ
ตอนนี้คุณพร้อมที่จะทำการแทนที่การค้นหาแบบโต้ตอบ เพื่อความง่ายสมมติว่าคุณต้องการแทนที่คำว่า "ด่วน" โดย "super" ตอนนี้เรียก dired-do-query-replace-regexp มันจะแจ้งให้คุณสำหรับสตริง regex และสตริงแทนที่ พิมพ์ "ด่วน" ป้อนจากนั้น "สุดยอด"
ตอนนี้ emacs จะใช้รูปแบบของคุณและตรวจสอบไฟล์และหยุดและแสดงให้คุณเมื่อมีการแข่งขันเกิดขึ้น เมื่อสิ่งนี้เกิดขึ้น emacs จะแจ้งให้คุณทราบและคุณมีทางเลือกในการเปลี่ยนแปลงหรือข้ามการเปลี่ยนแปลง หากต้องการเปลี่ยนแปลงให้พิมพ์ y หากต้องการข้ามให้พิมพ์ n หากคุณต้องการให้ emacs ดำเนินต่อไปและทำการเปลี่ยนแปลงดังกล่าวกับไฟล์ปัจจุบันให้พิมพ์!
หากคุณต้องการยกเลิกการดำเนินการทั้งหมดโดยไม่บันทึกการเปลี่ยนแปลงใด ๆ ให้พิมพ์ type Ctrl + g 】จากนั้นออกจาก emacs โดยใช้เมนู〖ไฟล์▸ออกจาก Emacs ac
บันทึกไฟล์ที่เปลี่ยนแปลง
ตอนนี้หลังจากที่คุณผ่านการทดสอบข้างต้นแล้วคุณจะต้องทำอีกหนึ่งขั้นตอนและนั่นคือการบันทึกไฟล์ที่เปลี่ยนแปลง
หากคุณใช้ emacs เวอร์ชัน 22 หรือใหม่กว่าให้โทร ibuffer เพื่อเข้าสู่โหมดการแสดงรายการบัฟเฟอร์จากนั้นพิมพ์【 * u 】เพื่อทำเครื่องหมายไฟล์ที่ไม่ได้บันทึกทั้งหมดแล้วพิมพ์ S เพื่อบันทึกทั้งหมด (นั่นคือ shift-s)
หากคุณใช้ emacs เวอร์ชั่น 21 คุณสามารถทำได้: call list-buffers จากนั้นเลื่อนเคอร์เซอร์ไปยังไฟล์ที่คุณต้องการบันทึกและพิมพ์ s มันจะทำเครื่องหมายไฟล์เพื่อบันทึกการกระทำในภายหลัง พิมพ์ u เพื่อยกเลิกการทำเครื่องหมาย เมื่อเสร็จแล้วให้พิมพ์ x เพื่อเรียกใช้การบันทึกไฟล์ทั้งหมดที่ทำเครื่องหมายเพื่อบันทึก (ใน emacs ไฟล์ที่เปิดเรียกว่า "บัฟเฟอร์" ไม่สนใจสิ่งอื่น ๆ ที่นั่น)
นอกจากตัวเลือกข้างต้นคุณยังสามารถเรียก save-some-buffers 【 Ctrl + xs 】จากนั้น emacs จะแสดงไฟล์ที่ไม่ได้บันทึกแต่ละไฟล์และถามว่าคุณต้องการบันทึกหรือไม่
หมายเหตุ: regex ของ emacs ไม่เหมือนกับ Perl หรือ Python แต่คล้ายกัน สำหรับข้อมูลสรุปและรูปแบบทั่วไปโปรดดู: Emacs Regex