vim: ใช้สตริงจากการค้นหาในคำสั่งแทนที่


16

ฉันมักใช้/คำสั่งการค้นหาเป็นกลุ่มเพื่อตรวจสอบนิพจน์ปกติของฉัน (เพื่อดูว่าตรงกับอะไร) หลังจากนั้นฉันมักจะใช้:%sคำสั่งแทนที่โดยที่ฉันใช้ regexp จากการค้นหาเป็นสตริงที่จะถูกแทนที่เช่นฉันแรกมองหาสตริงดังกล่าว:

/TP-\(\d\{5\}\)-DD-\d\{3\}

มันตรงกับสิ่งที่ฉันต้องการดังนั้นฉันจะแทนที่ของฉัน:

:%s/TP-\(\d\{5\}\)-DD-\d\{3\}/\1/g

แต่ฉันต้องเขียน regexp ทั้งหมดอีกครั้งที่นี่ โดยปกติ regexp นั้นยาวกว่ามากนั่นคือสาเหตุที่ฉันกำลังมองหาวิธีแก้ปัญหา:

มีทางลัดหรือสคริปต์ vim สำหรับวางรูปแบบการค้นหานั้นลงในคำสั่ง replace โดยตรงหรือไม่?

ฉันใช้เป็นกลุ่มใน terminal (ไม่มี gvim)

คำตอบ:


20

โดยทั่วไปนิพจน์ทั่วไปที่ว่างเปล่าหมายถึงการใช้นิพจน์ทั่วไปที่ป้อนก่อนหน้านี้ดังนั้น:%s//\1/gควรทำในสิ่งที่คุณต้องการ


ว้าวมันง่ายมาก! สิ่งที่ฉันต้องการจริงๆขอบคุณ
kars7e

10
นอกจากนี้หากคุณต้องการตรวจสอบหรือแก้ไขรูปแบบที่ใช้ล่าสุดคุณสามารถใช้Control-rแล้ว /ใส่เนื้อหาของรูปแบบการค้นหา register ( /)ลงในบรรทัดคำสั่งที่พิมพ์บางส่วนโดยตรง (เช่นทันที:%s/)
Chris Johnsen

คำใบ้นั้นมีประโยชน์มากเช่นกัน ขอบคุณ @Chris! +1
kars7e

ถ้าฉันต้องการติดตาม "\ 1" ด้วยหมายเลขอย่างเช่นพูด 23 ฉันจะหลีกเลี่ยงการตีความว่าเป็น "\ 123" ได้อย่างไร
แชมป์

@Champ เนื่องจากการอ้างอิงกลับไปถึงเท่านั้น\9จึงไม่มีความกำกวม
Kusalananda

4

อีกวิธีที่ดีในการดูการค้นหา regexes ที่ผ่านมาเช่นเดียวกับคำสั่ง Ex และทำการเปลี่ยนแปลงพวกเขาคือการแก้ไขคำสั่งเหล่านี้ในโหมดปกติ จากโหมดนี้คุณจะมีพลังเสียงทั้งหมดรวมทั้งการคัดลอกและวาง

  • ที่ไหน: มากกว่า?หรือ/เพื่อการค้นหาลองq/หรือq?
  • สำหรับคำสั่ง Ex แทนที่จะ:ลองq:
  • เพื่อออกจากโหมดนี้ให้ใช้ CtrlC

:help q:หากต้องการอ่านดูรายละเอียดเพิ่มเติม

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