จะเปลี่ยนเฉพาะภายในการเลือกภาพได้อย่างไร


27

หนึ่งจะได้รับเป็นกลุ่มเพื่อแทนที่ตัวละครในการเลือกภาพเท่านั้นและไม่ได้ที่อื่นในบรรทัด? ตัวอย่าง:

  • เส้น: int arr[] = { 00 01 02 03 04 05 05 /* ... lots more like this*/};
  • การเลือกภาพ: { 00 01 02 03 04 05 05 /*... lots more like this*/}
  • คำสั่ง: :'<,'>s/\ /\,0x/g
  • ที่คาดว่าจะ int arr[] = {0x00,0x01,0x02,0x03 /* and so on*/};

อย่างไรก็ตามหลังจากดำเนินการเหล่านี้แล้วผลลัพธ์ที่แท้จริงคือ:

int,0xarr[],0x=,0x{0x00,0x01,0x02,0x03 /* and so on*/};

มีวิธีแก้ไขคำสั่งด้านบนเพื่อสร้างผลลัพธ์ที่คาดหวังหรือไม่ ไม่'<และ'>กำหนดช่วงที่คำสั่งค้นหา (และแทนที่) ทำงานหรือไม่


2
ฉันไม่รู้คำตอบ แต่ฉันรู้ว่า:substituteโอเปอเรเตอร์ทีละบรรทัดซึ่งอธิบายสิ่งที่คุณเห็นในตัวอย่างของคุณ
Karl Yngve Lervåg

คำตอบ:


32
:'<,'>s/\%V\ /\,0x/g

%Vจับคู่ภายในพื้นที่ภาพ :help %Vดู


1
มันควรจะกล่าวว่าการแก้ปัญหานี้เท่านั้นที่จะตรวจสอบว่าจุดเริ่มต้นของการแข่งขันอยู่ในการเลือกภาพ
Christian Brabandt

7

มี\%Vไว้สำหรับดู:h %V:

\% V

จับคู่ภายในพื้นที่ภาพ เมื่อโหมดภาพถูกหยุดการแข่งขันในพื้นที่ที่ gv จะเลือกใหม่ นี่เป็นการแข่งขันแบบ a / zero-width เพื่อให้แน่ใจว่ารูปแบบทั้งหมดอยู่ในพื้นที่ Visual วางไว้ที่จุดเริ่มต้นและจุดสิ้นสุดของรูปแบบเช่น:> /\%Vfoo.*bar\%V

เพื่อแทนที่fooโดยbarในการเลือกเท่านั้นใช้:

:'<,'>s/\%Vfoo\%V/bar/
:'<,'>s/\%Vfoo\%V/bar/g
:'<,'>s/\%Vfoo\%V/bar/cg

ในกรณีนี้โดยเฉพาะ:

:'<,'>s/\%V\ \%V/\,0x/g

4

หากคุณต้องการที่จะทดแทนภายในภาพบล็อก , คุณสามารถใช้ปลั๊กอินvis.vim

http://vim.wikia.com/wiki/Applying_substitutes_to_a_visual_block

ติดตั้ง:

ดาวน์โหลด vis.vba.gz จากhttp://www.drchip.org/astronaut/vim/index.html#VIS

# Open vis.vba.gz in Vim 7.1 or later.
vim vis.vba.gz

# Source the open file.
:so %

# Quit Vim
:q

เมื่อติดตั้งแล้ว:

ctrl-v to enter visual-block mode
Move to select the block you want
:B s/pattern/newtext/

เมื่อคุณพิมพ์:Bคุณจะเห็นสิ่งนี้

:'<,'>B 

ไม่เป็นไรเพียงแค่บอกว่าคำสั่งจะใช้กับบล็อกภาพที่เลือกในปัจจุบัน

ยิ่งไปกว่านั้นคุณสามารถดำเนินการคำสั่ง Ex ใด ๆ บนบล็อกที่มองเห็นไม่ใช่แค่การแทนที่ :B !sortเช่น

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