วิธีการแทนที่ข้อความภายในด้วยข้อความที่ดึงออก


17

รูปแบบการแก้ไขที่ฉันพบบ่อยคือ: ฉันต้องการดึงชิ้นส่วนของข้อความในเครื่องหมายคำพูดหรือวงเล็บปีกกาและแทนที่ส่วนของข้อความนั้นในเครื่องหมายคำพูด / วงเล็บคู่อื่น

ตัวอย่างเช่นถ้าฉันต้องการคัดลอกชื่อคลาสfoo barและวางที่อื่น:

<span class="foo bar">

<div class="this-should-be-replaced-with-foo-and-bar">

สิ่งที่ฉันรู้คือสิ่งนี้: ถ้าฉันย้ายเข้าไปในชั้นเรียนช่วงที่ฉันใช้yi"ในการดึงข้อความภายในคำพูด

ตอนนี้ฉันมีสิ่งนี้ในทะเบียนของฉันดังนั้นฉันควรจะสามารถแทนที่เนื้อหาคลาสของ div ด้วย แต่ฉันไม่สามารถหาวิธีที่สะดวกในการทำเช่นนี้

หากฉันใช้ciwสิ่งนี้จะเป็นการเขียนทับการลงทะเบียนด้วยเนื้อหาที่จะเปลี่ยนแปลงดังนั้นฉันจึงหลวมข้อความที่ดึงออก

สิ่งที่ดีที่สุดที่ฉันสามารถขึ้นมาจะย้ายไปอ้างเป็นครั้งแรกของการเรียนของ div ตีแล้วลบที่จะพูดต่อไปด้วยpdt"

โดยปกติแล้วฉันจะทำให้ตำแหน่งของฉันแย่ลงและฉันก็วางไว้ที่ไหนสักแห่งภายในเครื่องหมายคำพูดที่รวมสองสายเข้าด้วยกันและมันก็ทำให้สิ่งต่าง ๆ สับสน

ฉันหวังว่าจะมีวิธีใดที่จะทำชุด "แทนที่ข้อความภายในด้วยเนื้อหาที่ดึงของฉัน" เพื่อให้ง่ายขึ้น

คำตอบ:


19

คุณสามารถใช้เมื่อภายในvi"p ""สิ่งนี้สามารถแทนที่ข้อความใน yank register ดังนั้นมันจึงสำคัญเมื่อคุณต้องการใช้ข้อความ yanked ดั้งเดิมมากกว่าหนึ่งครั้ง

แก้ไข : ข้อมูลเพิ่มเติมจากความคิดเห็นของ Octaviour เกี่ยวกับการทำให้สามารถใช้ซ้ำได้มากกว่าหนึ่งครั้ง:

เพื่อที่จะทำอย่างนั้นฉันจะงัดที่จะลงทะเบียนชื่อซึ่งจะทำให้ทั้งสองคำสั่ง: "ayi"และและถ้าคุณใช้ลงทะเบียนvi""apa


2
ฉันจะทำอย่างละเอียดในการแก้ปัญหานี้ คุณดึงข้อความที่คุณต้องการคัดลอกก่อน จากนั้นคุณไปยังสถานที่ที่คุณต้องการวางและเลือกใช้ vi "ด้วยสายตาตอนนี้คำสั่งวางจะวางเนื้อหาของการลงทะเบียนที่ไม่มีชื่อที่เคอร์เซอร์พร้อมกันและลบข้อความที่เลือกดังนั้น vi" p บรรลุสิ่งที่คุณต้องการ มันจะแทนที่เนื้อหาของการลงทะเบียนที่ไม่มีชื่อโดยไม่อนุญาตให้คุณวางข้อความเดิมสองครั้ง ในการทำเช่นนั้นฉันจะดึงชื่อลงทะเบียนซึ่งทำให้ทั้งสองคำสั่ง: "ayi" และและ vi "" ap หากคุณใช้ register a
Octaviour

ขอบคุณที่ให้รายละเอียด ช่วยในการสะกดสิ่งต่าง ๆ ด้วยการเคลื่อนไหวเป็นกลุ่มทำให้ง่ายต่อการจดจำในภายหลัง มันยังไม่ง่ายอย่างที่ฉันหวังว่ามันจะเป็น แต่มันก็สมเหตุสมผลดี การใช้คำสั่ง dot เพื่อให้ทำซ้ำและแทนที่ครั้งที่สองอย่างรวดเร็วดูเหมือนจะไม่ทำงาน ฉันหวังว่าจะเป็นทางลัด :)
jurgenb

11

คุณสามารถใช้การลงทะเบียนหมายเลข งัดแรก "foo บาร์" ด้วยyi"ซึ่งจะเติมลงทะเบียนดู"0 :h "0จากนั้นทำci"<c-r>0เพื่อแทนที่ด้วยเนื้อหาของ register 0

ดู:h i_CTRL-Rคำอธิบายของส่วนสุดท้าย


2
ทำไมไม่เพียงแค่โยนมันลงในทะเบียนที่ไม่มีชื่อ ( yi") และวางมันจากทะเบียน0ที่เก็บไว้หลังจากที่คุณลบข้อความที่จะเปลี่ยน ( ci"<c-r>0)? ในแง่ของ vimgolf คุณจะชนะการกดแป้น 2 ครั้งและคุณจะไม่ยุ่งกับการลงทะเบียนของคุณ
statox

ทันทีที่ฉันกดปุ่ม 'a' ฉันจะสิ้นสุดในโหมดแก้ไข แต่สิ่งนี้ไม่ได้คัดลอกไปยังการลงทะเบียน
jurgenb

@ n3wjack ว่าอาจเป็นเพราะคุณไม่ได้กดCTRL+rก่อนaว่าเป็นสิ่งที่<c-r>หมายถึง
statox

1
@ KarlYngveLervågจริงciwไม่ใส่ข้อความที่ถูกลบในการลงทะเบียนชื่อ แต่การลงทะเบียนจะเลื่อนที่ว่าทำไมคุณต้องใช้แทน<c-r>0 ดู<c-r>" :h quote_number
statox

1
ฉันคิดว่าโดยเฉพาะอย่างยิ่งจุดที่นี่ไม่ได้เกี่ยวกับการลงทะเบียนที่ไม่มีชื่อ แต่เกี่ยวกับการลงทะเบียนหมายเลข ทะเบียนเต็มไปโดยเฉพาะคำสั่งงัดและจะไม่ถูกรบกวนจากเช่น"0 c
Karl Yngve Lervåg

9

นี่คือทางออกอื่น มันไม่ได้ดีที่สุดในแง่ Vimgolf แต่ใช้หลุมดำลงทะเบียน:

เมื่อคุณอยู่ในสตริงคุณสามารถงัดมันตามปกติโดยใช้foo baryi"

จากนั้นเข้าไปในวงเล็บเพื่อเปลี่ยน: "_di"P

ซึ่งเป็น:

"_       We will use the black hole register
di"      Delete the inner brackets and put the deleted text in the black hole register
P        Put the previously yanked text

ข้อดีของการลงทะเบียนหลุมดำคือมันจะไม่ทำให้คนอื่นลงทะเบียน ดู:h quote_รายละเอียดเพิ่มเติมได้ที่

(โปรดทราบว่าคำตอบนี้อยู่ที่นี่เท่านั้นเพื่อพูดคุยเกี่ยวกับการลงทะเบียน black out ฉันใช้การเลือกภาพตามที่แนะนำโดย @grodzik)


ฉันคิดว่าคุณต้องการตัวพิมพ์ใหญ่Pสำหรับตัวนั้น เมื่อคุณdi"เคอร์เซอร์ของคุณจะถูกทิ้งไว้ในคำพูดสุดท้ายและpจะวางหลังจากที่ที่Pจะวางก่อนตำแหน่งปัจจุบัน
jecxjo

@ jecxjo ถูกต้องฉันแก้ไขคำตอบแล้วขอบคุณ!
statox

8

ฉันต้องการนี้จึงมักจะผมเขียนปลั๊กอินเพื่อลดความซับซ้อนและช่วยให้ความเร็วสูงสุด: ReplaceWithRegister

ปลั๊กอินนี้มีgrคำสั่งแบบสองในหนึ่งที่แทนที่ข้อความที่ครอบคลุมโดย {motion} / วัตถุข้อความทั้งบรรทัด (s) หรือเลือกปัจจุบันด้วยเนื้อหาของการลงทะเบียน; ข้อความเก่าจะถูกลบในการลงทะเบียนหลุมดำนั่นคือมันหายไป มันจัดการกรณีมุมอย่างโปร่งใสและอนุญาตให้ทำซ้ำอย่างรวดเร็วผ่าน.คำสั่งมาตรฐาน หากคุณไม่ชอบหน้านี้มีลิงก์ไปยังทางเลือกอื่น


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