คำถามติดแท็ก replace

คำสั่งหรือโหมดเพื่อเขียนทับข้อความ สำหรับการดำเนินการค้นหาและแทนที่ให้ใช้แท็ก [แทน]

4
วิธีการแทนที่คำด้วยคำที่ถูกดึงในโหมดปกติ
เมื่อฉันต้องแทนที่คำด้วยคำอื่นที่ฉันดึงมาก่อนฉันมักจะใช้เวิร์กโฟลว์ที่ดูเหมือนผิดธรรมชาติสำหรับฉัน: สมมติว่าฉันมีข้อความนี้: foo bar buzz และฉันต้องการดึงfooและแทนที่barด้วยสิ่งที่ฉันดึงมาก่อน หลังจาก yanking fooฉันเห็นตัวเลือกต่อไปนี้: ตัวเลือกที่ 1 วางเคอร์เซอร์barด้วยw ใส่fooด้านหน้าbarด้วยP วางเคอร์เซอร์ที่ส่วนbที่เหลือbarและลบคำด้วยde ตัวเลือก 2 วางเคอร์เซอร์บนแถบด้วย w ใช้deเพื่อลบbar ใส่เนื้อหาของการลงทะเบียน 0 ด้วย"0P(ตั้งแต่ผมลบbar, fooไม่สามารถเข้าถึงได้อีกต่อไปด้วยง่ายp) ทั้งสองวิธีดูซับซ้อนเกินไปสำหรับฉันและฉันแน่ใจว่ามีวิธีที่มีประสิทธิภาพมากขึ้นในการบรรลุการกระทำนี้ แต่ฉันไม่สามารถหาวิธีได้ pความคิดนี้จะรวมการลบและการกระทำที่ใส่ในเพียงหนึ่งหรืออย่างน้อยหลีกเลี่ยงที่จะให้คำลบในงัดลงทะเบียนเพื่อที่ฉันสามารถใส่คำที่ต้องการด้วยง่าย ฉันรู้ว่าโหมดการแทนที่ถูกกระตุ้นด้วยRแต่มันไม่อนุญาตให้ใส่สิ่งที่ถูกกระชาก TL : DR : วิธีแทนที่คำด้วยเนื้อหาของ yank register ได้อย่างไร

2
แทนที่รูปแบบด้วยหมายเลขบรรทัดปัจจุบัน
ฉันต้องการแทนที่ 'x' ในไฟล์นี้ด้วยหมายเลขบรรทัดปัจจุบัน นั่นคือการเปลี่ยนแปลง x x x ถึง 1 2 3 สำหรับตอนนี้ฉันใช้ Perl one-liner: perl -pi -e '$x=$.; s/x/$x/' myfile.txt ฉันคิดว่า UltraEdit สามารถทำได้ด้วยการเลือกแนวตั้งและแทนที่ สิ่งนี้สามารถทำได้ในกลุ่ม? (ตัวอย่างของฉันที่นี่ถือว่า 'x' คือทั้งหมดที่มีในหนึ่งบรรทัด แต่บรรทัดในไฟล์จริงของฉันมีความซับซ้อนมากขึ้น)

2
จะแทนที่ข้อความในบล็อกข้อความที่เลือกได้อย่างไร?
ไม่ใช่เรื่องง่ายที่จะหาชื่อที่ดีสำหรับปัญหาของฉัน ฉันรู้ที่จะแทรกหน้าบล็อกข้อความ: Ctrl- v เลือก ข้อความประเภทบรรทัดI ESC ตอนนี้ฉันต้องการจะทำเช่นนี้ แต่ยังรวมถึงการแทนที่ส่วนหนึ่งในการเลือกบล็อกของฉัน ขณะนี้ฉันกำลังดำเนินการสองอย่าง Ctrl- v เลือกบล็อก x กลับไปเริ่มต้น ตามด้วยลำดับที่ฉันพูดถึงข้างต้น มีวิธีรวมการดำเนินการทั้งสองนี้ด้วยการเลือก ( Ctrl- v) บล็อกเพียงครั้งเดียวหรือไม่ นี่คือตัวอย่างเล็ก ๆ : ฉันต้องการแปลงบล็อกต่อไปนี้ 1 text 2 text 3 text 4 text 5 text เข้าไป new text new text new text new text new text ทำ "การดำเนินการ" เพียงครั้งเดียว

3
วิธีแทนที่อักขระมากกว่าหนึ่งตัวโดยไม่ต้องเข้าสู่โหมดแทรก
ฉันมีไฟล์ที่มีบรรทัดที่มีลักษณะดังนี้: foofoo.xy.barbar ฉันต้องการที่จะเปลี่ยนไปxy ghฉันพยายามทำ2r-> ghแต่เห็นได้ชัดว่าไม่ได้ผลเพราะมันแทนที่xyด้วยggแล้วเลื่อนเคอร์เซอร์ไปทางซ้ายหนึ่งจุด มีวิธีการนี้หรือไม่โดยไม่ต้องเข้าสู่โหมดแทรกหรือไม่ใช้การกดแป้นมากขึ้น (เช่น:s/xy/gh/)?

3
วิธีการเลือกเปลี่ยนสตริงไฮไลต์
ด้วยการค้นหาฉันได้เน้นสตริงที่ฉันต้องการเปลี่ยน ตอนนี้ฉันต้องการแทนที่เฉพาะข้อความที่เน้นสี ฉันใช้nเพื่อไปยังอินสแตนซ์ถัดไปของสตริงการค้นหา ฉันคิดว่าฉันสามารถทำอะไรบางอย่างเช่นciwแต่เปลี่ยนคำทั้งหมดไม่ใช่แค่ข้อความที่เน้นสี ฉันคุ้นเคย:%s/old/new/gแต่ไม่ต้องการเปลี่ยนอินสแตนซ์ทั้งหมด แต่ฉันต้องการเลื่อนเคอร์เซอร์ไปที่แต่ละอินสแตนซ์แล้วตัดสินใจว่าจะเปลี่ยนหรือไม่
11 search  replace 

6
วิธีคัดลอกสี่อักขระแรกของทุกบรรทัดไปยังจุดสิ้นสุดของบรรทัดเดียวกันได้อย่างไร
รับชุดของบรรทัดที่มีลักษณะคล้ายกับนี้: 2001 "Some Kind of Title," Author's Name, Publication Name, 1 Mar. 2002 "Some Kind of Title," Author's Name, Publication Name, 12 Oct. 2003 "Some Kind of Title," Author's Name, Publication Name, 8 Apr. 2004 "Some Kind of Title," Author's Name, Publication Name, 3 Jun. มีวิธีที่ฉันสามารถคว้าตัวละครสี่ตัวแรก (ปี) และคัดลอกไปที่ท้ายบรรทัดเพื่อให้เป็นดังนี้: 2001 "Some …

3
ทางเลือกเพื่อหลบหลีกการทับในการค้นหาและแทนที่สตริงที่มีความยาว
มีทางเลือกอื่นใดในการค้นหาเป็นกลุ่มและแทนที่สตริง, แทนที่จะต้องหลีกหนีทุกอักขระพิเศษในสตริง ตัวอย่างเช่นหากฉันต้องการจับคู่สตริงต่อไปนี้และแทนที่ด้วยบางสิ่ง [ERROR] Login unsucessful ถ้าอย่างนั้นฉันต้องทำ :%s/\[ERROR\]\ Login\ unsucessful/something/g และมันก็น่าเกลียดและเจ็บปวดมากขึ้นสำหรับสตริงที่ซับซ้อนที่มีอักขระพิเศษจำนวนมาก ฉันต้องการทำบางสิ่งเช่น :%s/"[ERROR] Login unsucessful"/something/g ซึ่งจะหลีกเลี่ยงการหลบหนีทั้งหมด มีคุณสมบัติเช่นนี้หรือไม่?

3
มีการเคลื่อนไหวคล้ายกับ "ที่ไม่รวมช่องว่างนำ?
ฉันใช้การa"เคลื่อนไหวค่อนข้างบ่อยเป็นกลุ่ม เช่นใช้ca"ในขณะที่ refactoring ชิ้นส่วนของรหัสเพื่อแทนที่อาร์กิวเมนต์ hardcoded ด้วยชื่อตัวแปร ปัญหาของวิธีนี้คือa" มีช่องว่างนำหน้าหากไม่มีช่องว่างต่อท้าย : พื้นที่สีขาวต่อท้ายจะรวมอยู่ด้วยเว้นแต่จะไม่มีไม่มีดังนั้นจึงมีพื้นที่สีขาวนำหน้า ดังนั้นเมื่อฉันแก้ไขการเรียกใช้ฟังก์ชันดังนี้: aFunction(arg1, "toBeReplaced", arg3) #original aFunction(arg1, replacedArg, arg3) #refactored ฉันได้ด้วยตนเองอีกครั้งแทรกพื้นที่ก่อนที่จะreplacedArgเป็นca"ลบมัน มีการเคลื่อนไหวใด ๆ ที่คล้ายกันซึ่งไม่รวมพื้นที่สีขาวนี้หรือมีอะไรอีกบ้างที่ฉันสามารถใช้แทนca"สิ่งนั้นได้ซึ่งช่วยให้ฉันไม่ต้องพิมพ์พื้นที่เพิ่มเติมหรือไม่ หมายเหตุ: cf"ทำสิ่งที่ฉันต้องการตราบเท่าที่สตริงไม่มีเครื่องหมายคำพูดใด ๆ ที่หลบหนี แต่ต้องการให้ฉันมีเคอร์เซอร์ที่จุดเริ่มต้นของสตริง ฉันต้องการบางสิ่งบางอย่างที่ฉันสามารถใช้จากที่ใดก็ได้ภายในสตริงและ?"<Enter>cf"ค่อนข้างอึดอัดที่จะพิมพ์ มันเกี่ยวกับการ<Space>กดแป้นเดียวน้อยกว่าและเกี่ยวกับความจริงที่ว่าบ่อยครั้งที่ฉันมักลืมที่จะรวมพื้นที่ทำให้ฉันต้องกดแป้นพิเศษเพิ่มเติมอย่างน้อยสี่ครั้ง ( bi<Space><Esc>) และหยุดโฟกัสของฉัน ดังนั้นความยาวของคำสั่งการเปลี่ยนจึงไม่สำคัญตราบใดที่มันจะลบเฉพาะข้อความระหว่างตัวอักษรที่กำหนดและจากนั้นเข้าสู่โหมดแทรก

2
วิธีที่มีประสิทธิภาพมากที่สุดในการแทนที่บัฟเฟอร์ทั้งหมดหรือไม่
ขณะนี้ฉันมีสองวิธีที่คล้ายกันเพื่อแทนที่บัฟเฟอร์ทั้งหมดด้วยข้อความอื่น ๆ (พูดในคลิปบอร์ด) วิธีที่ # 1: ลบทุกบรรทัด: :%d. วางข้อความ: "+P(หรือคล้ายกัน: :put+) วิธีที่ # 2: ggVGสายตาเลือกเส้นทั้งหมด: "+Pวางข้อความ: อย่างไรก็ตามฉันไม่สามารถหาทางสั่งไฟได้ สิ่งที่ใกล้เคียงที่สุดที่ฉันพบคือ:changeคำสั่ง แต่ดูเหมือนว่าจะทำงานได้ดีกับการลงทะเบียน แน่นอนฉันสามารถสร้างฟังก์ชั่นและ / หรือแมปคีย์เพื่อทำสิ่งนั้น แต่ก่อนที่ฉันจะทำการปรับแต่งเหล่านี้ทั้งหมดฉันต้องการตรวจสอบให้แน่ใจ: มีคำสั่งในตัวเพื่อแทนที่ช่วงของบรรทัดด้วยข้อความอื่น ๆ หรือไม่? เช่นคุณสามารถ:%replace+แทนที่บัฟเฟอร์ทั้งหมดด้วยข้อความในคลิปบอร์ด?

3
ใส่หมายเลขที่เพิ่มขึ้นในแต่ละบรรทัดในการเลือกหรือการจับคู่
ฉันมีปัญหาฉันสามารถคิดถึงวิธีการทั่วไปสองวิธีในการแก้ปัญหา แต่ฉันไม่ทราบวิธีที่เฉพาะเจาะจงสำหรับทั้งสองวิธี ... Level 1: cũng also Level 1: và and Level 1: như like; such as Level 2: các plural marker Level 2: của belonging to ... สำหรับแต่ละบรรทัดที่ขึ้นต้นด้วย "ระดับ n" ฉันต้องการใส่ตัวเลขโดยเริ่มต้นด้วย "01" เพื่อความง่ายเรามาเติมตัวเลขกัน วิธีที่ 1: เลือกทุกบรรทัดด้วยตนเองในระดับเดียวกัน วิงวอนขอใช้เวทมนตร์ฉันจะเรียนรู้เร็ว ๆ นี้ วิธีที่ 2: เขียนการค้นหาและแทนที่ที่ตรงกับทุกบรรทัดด้วยระดับที่กำหนดซึ่งในแต่ละการแข่งขันรวมถึงตัวเลขในข้อความแทนที่ซึ่งเพิ่มขึ้นทีละหนึ่งด้วยการแข่งขันแต่ละ ฉันได้พบคำถามที่คล้ายกันใน StackOverflowหรือไซต์ Vim อื่น ๆ แต่ดูเหมือนว่าจะมีปัญหาอย่างใดอย่างหนึ่งต่อไปนี้: เป็นเรื่องเกี่ยวกับการแทรกหมายเลขบรรทัดปัจจุบันแทนที่จะเป็นหมายเลขที่กำหนดเอง …
10 macro  replace 

1
วิธีรับตัวอย่างสำหรับคำสั่งการแทนที่?
บ่อยครั้งที่ฉันพบว่าตัวเองต้องการทำการทดแทนที่จะมีการจับคู่แยกกันทั่วทั้งไฟล์ขนาดใหญ่และด้วยการค้นหาที่ไม่สำคัญและการแสดงออกแทน okFunction(arg1, arg2 arg3)ตัวอย่างเช่นสมมติว่าฉันมีบางฟังก์ชั่นการโทรเช่น args จะแตกต่างกันไปกับการเรียกใช้ทุกฟังก์ชั่นแน่นอน arg2ตอนนี้บอกว่าผมได้ค้นพบการทำงานที่ดีกว่าที่ไม่จำเป็น ฉันสามารถปรับไฟล์ทั้งหมดได้อย่างง่ายดายด้วย :%s/\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))/betterFunction(\1, \3)/gc แม้ว่าแนวคิดง่าย ๆ ฉันไม่แน่ใจว่าฉันมีไวยากรณ์ในรูปแบบที่ค่อนข้างยาวนี้ การcตั้งค่าสถานะช่วยได้ที่นี่จริงๆ แต่ปัญหาคือเมื่อขอการยืนยันเสียงเรียกเข้าจะไม่แสดงว่าการแข่งขันจะถูกแทนที่ด้วยอะไร ฉันหมายความว่ามันจะแสดงการแสดงออกแทน แต่ไม่ได้ผลการประเมิน หากฉันยืนยันการเปลี่ยนตัวด้วยyเสียงเรียกเข้าจะข้ามไปยังนัดถัดไปทันทีและฉันจะไม่ยอมแพ้เพื่อดูว่าฉันทำผิดพลาดหรือไม่ ฉันได้พบปลั๊กอินvim-overที่แก้ปัญหาได้เพียงบางส่วน แต่ก็ต่อเมื่อคณิตศาสตร์ทั้งหมดปรากฏบนหน้าจอเมื่อคุณพิมพ์คำสั่ง เมื่อคุณกด Enter พฤติกรรมจะเหมือนกับที่ฉันได้อธิบายไว้ข้างต้นและฉันไม่ได้รับหน้าตัวอย่าง ดังนั้นมีวิธีรับ vim ประเมินนิพจน์การแทนที่เมื่อขอการยืนยันคำสั่งทดแทนหรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.