มีหลายวิธีในการทำเช่นนี้
ภายในไดเรกทอรีปัจจุบัน
หากคุณต้องการที่จะดำเนินการค้นหา / แทนที่ในต้นไม้โครงการ, คุณสามารถใช้เป็นกลุ่มของรายการอาร์กิวเมนต์
เพียงเปิด Vim จากนั้นใช้:argsคำสั่งเพื่อเติมรายการอาร์กิวเมนต์ คุณสามารถผ่านชื่อไฟล์หลายรายการหรือแม้กระทั่ง globs
ตัวอย่างเช่น:args **/*.rbจะค้นหาไดเรกทอรีทับทิมซ้ำ ๆ ในปัจจุบันเพื่อค้นหาไฟล์ vim **/*.rbแจ้งให้ทราบว่าเรื่องนี้ยังเป็นเหมือนการเปิดเป็นกลุ่มที่มี คุณสามารถใช้findคำสั่งของเชลล์เพื่อรับรายการไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันโดยการเรียกใช้:
:args `find . -type f`
คุณสามารถดูรายการ args ปัจจุบันได้:argsด้วยตัวเอง หากคุณต้องการเพิ่มหรือลบไฟล์จากรายการคุณสามารถใช้:argaddหรือ:argdeleteคำสั่งตามลำดับ
เมื่อคุณพอใจกับรายการตอนนี้คุณสามารถใช้:argdoคำสั่งอันทรงพลังของ Vim ซึ่งรันคำสั่งสำหรับทุกไฟล์ในรายการอาร์กิวเมนต์::argdo %s/search/replace/g
นี่คือเคล็ดลับบางอย่างสำหรับการค้นหา (ขึ้นอยู่กับความคิดเห็นบางส่วน):
- ใช้ขอบเขตของคำหากคุณต้องการค้นหา "foo" แต่ไม่ใช่ "foo_bar" ใช้
\<และ\>สร้างรอบ ๆ รูปแบบการค้นหาดังนี้::argdo %s/\<search\>/foobar/g
- ใช้
/cแฟลกการค้นหาหากคุณต้องการให้ Vim ขอคำยืนยันก่อนที่จะเปลี่ยนคำค้นหา
- ใช้
/eแฟล็กการค้นหาหากคุณต้องการข้ามข้อผิดพลาด "pattern not found"
:argdo %s/search/replace/g | updateนอกจากนี้คุณยังสามารถเลือกที่จะบันทึกไฟล์หลังจากดำเนินการค้นหา: ที่นี่:updateใช้เพราะมันจะบันทึกไฟล์เฉพาะเมื่อมีการเปลี่ยนแปลง
เปิดบัฟเฟอร์
หากคุณมีบัฟเฟอร์เปิดอยู่แล้วคุณต้องการทำการค้นหา / แทนที่คุณสามารถใช้:bufdoซึ่งจะรันคำสั่งสำหรับทุกไฟล์ในรายการบัฟเฟอร์ของคุณ ( :ls)
คำสั่งนั้นคล้ายกับ:argdo: :bufdo %s/search/replace/g
คล้ายกับ:argdoและ:bufdoมี:windoและ:tabdoดำเนินการกับหน้าต่างและแท็บตามลำดับ มักใช้น้อย แต่ก็มีประโยชน์ที่จะรู้
/cตั้งค่าสถานะเพื่อยืนยันการทดแทน