การดึงและวางขณะเพิ่มขึ้น


14

ฉันกำลังแก้ไขไฟล์. sql ใน Vim:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),

สิ่งที่ฉันต้องการทำคือดึง(1, 1),สายแล้ววางมัน 137 ครั้ง; อย่างไรก็ตามฉันต้องการเพิ่มจำนวนที่สองในวงเล็บทุกครั้ง ผลลัพธ์จะมีลักษณะดังนี้:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),
(1, 2),
(1, 3),
...
(1, 137),

มีวิธีทำใน Vim หรือไม่และถ้าเป็นเช่นนั้นฉันจะใช้คำสั่งอะไร

ขอบคุณ!

คำตอบ:


11

วางเคอร์เซอร์ของคุณบน(1, 1),บรรทัดแล้วพิมพ์:

qaVypt)<C-a>q135@a

คำอธิบาย:

qaเริ่มการบันทึกแมโครภายในรีจิสเตอร์a (คุณสามารถเลือกตัวอักษรอื่นได้)

Vyp ทำซ้ำบรรทัดปัจจุบันโดยเลือกทั้งบรรทัด (V) คัดลอก (y) แล้ววางลงด้านล่าง (p)

t) เลื่อนเคอร์เซอร์ไปข้างหน้าวงเล็บปิดถัดไปเพื่อให้มันอยู่ในหมายเลขที่สอง

<C-a>( Ctrlและa) เพิ่มจำนวน

q สิ้นสุดการบันทึกของแมโคร

135@aไกลแมโครที่เก็บไว้ในทะเบียน135 ครั้ง

แก้ไข: Peter Rinckerมีคำสั่งที่สั้นกว่า:

qqYpW<c-a>q135@q

ความแตกต่างคือ:

จะใช้การลงทะเบียนคิวในการจัดเก็บแมโคร (เร็วกว่าการพิมพ์qqกว่าqaเพราะมันเป็นคีย์เดียวกัน),
ชุดมันเส้นที่มีเพียงหนึ่งการกดแป้นพิมพ์Y(แทนของทั้งสองVy)
และจะย้ายเคอร์เซอร์ไปยังหมายเลขที่สองมีเพียงหนึ่งการกดแป้นพิมพ์W(แทน จากt))


4
เป็นกลุ่มกอล์ฟ: qqyypW<c-a>q135@q. แม้สั้นถ้าคุณใช้แทนY yy
Peter Rincker

10

Vims ล่าสุดได้เรียนรู้เกี่ยวกับการเพิ่มภูมิภาคที่เลือกด้วยภาพรวมถึงการสร้างลำดับ ดังนั้นคุณสามารถทำได้หลังจากวางสาย 137 ครั้ง:

1) บล็อกการเลือกที่มองเห็น ( Ctrl-V) 1 วินาทีที่สองเริ่มต้นจากบรรทัดที่ 3

2) กด gCtrl-A

ฉันบันทึกการส่งหน้าจอที่นี่แล้ว

ข้อจำกัดความรับผิดชอบ: สิ่งนี้จำเป็นต้องมีกลุ่ม 7.4.900 หรือมากกว่านั้น


ทดสอบสำเร็จใน Vim 7.4.826 บน Debian / sid
Dubu

หน้าจอของคุณได้หายไป แต่วิธีนี้น่ากลัว! ขอบคุณ
david_nash

2

ง่ายต่อการเข้าใจ / ง่ายต่อการจดจำ / ง่ายต่อการปรับให้เข้ากับสถานการณ์อื่น ๆ ด้วยวิธีการ: ใช้ปลั๊กอินVisIncr (หากคุณต้องการใช้เวอร์ชันที่เล่นได้ดีกับผู้จัดการแพ็คเกจจากศตวรรษนี้ซึ่งต่างจากการจัดการกับvimballs คุณสามารถรับได้จากGitHub ) ด้วยมัน

  • ไปที่(1, 1),บรรทัดและดึงมัน:Vy
  • วาง 136 ครั้ง: 136p
  • ไปที่คอลัมน์ที่สองของ1และทำเครื่องหมายในแนวตั้ง:C-vGf)h
  • เรียกใช้ส่วนเพิ่ม: :II
  • อ่านคู่มือเพื่อหาข้อมูลเกี่ยวกับสินค้าอื่น ๆ:help visincr:

1

g^aผมอยากเล่นกับ

ลอง137i0^v137kg^aดู


1
ยินดีต้อนรับสู่Vi และกลุ่ม ! ฉันจัดรูปแบบคำตอบของคุณโดยใช้ markdown มันจะดียิ่งขึ้นถ้าคุณแก้ไขเพื่ออธิบายว่าคำตอบนี้ตอบคำถามได้อย่างไร
D. Ben Knoble
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.