ในกลุ่มฉันจะใช้แมโครกับชุดของเส้นได้อย่างไร


222

ฉันมีไฟล์ที่มีหลายบรรทัด ฉันบันทึกมาโครที่ดำเนินการในบรรทัดเดียว ฉันต้องการทำซ้ำแมโครนั้นในทุกบรรทัดที่เหลือในไฟล์ มีวิธีที่รวดเร็วในการทำเช่นนี้?

ฉันลอง Ctrl + Q ไฮไลต์ชุดของบรรทัดแล้วกด @@ แต่ดูเหมือนจะไม่ได้ทำอุบาย


คำถามนอกหัวข้อ: ฉันไม่รู้มาโคร VIM (หรือไม่อยากรู้: P) คุณมีลิงก์ "ขี้เกียจอ่าน" ที่น่าสนใจบนมาโคร VIM หรือไม่?
OscarRyz

แน่นอนนี่คือ: oreillynet.com/mac/blog/2006/07/…สรุปมันค่อนข้างดี
Jordan Parmer

นอกจากนี้คุณยังสามารถตรวจสอบ: เขาซับซ้อนซ้ำจากภายในเป็นกลุ่ม
Sam

คำตอบ:


354

ใช้คำสั่งปกติในโหมด Ex เพื่อเรียกใช้แมโครบนหลาย ๆ บรรทัด / ทั้งหมด:

ดำเนินการแมโครที่เก็บไว้ในการลงทะเบียนบนเส้นที่ 5 ถึง 10

:5,10norm! @a

เรียกใช้งานแมโครที่เก็บไว้ในการลงทะเบียนaบนบรรทัด 5 ถึงจุดสิ้นสุดของไฟล์

:5,$norm! @a

เรียกใช้แมโครที่เก็บไว้ในการลงทะเบียนaบนทุกบรรทัด

:%norm! @a

ดำเนินการจัดเก็บแมโครในการลงทะเบียนบนเส้นทั้งหมดที่ตรงกับรูปแบบ

:g/pattern/norm! @a

เมื่อต้องการเรียกใช้แมโครบนบรรทัดที่เลือกให้กดVและjหรือkจนกระทั่งเลือกภูมิภาคที่ต้องการ จากนั้นพิมพ์:norm! @aและสังเกตว่าบรรทัดอินพุตต่อไปนี้ถูกแสดง

:'<,'>norm! @a

ป้อน: ช่วยปกติในกลุ่มเพื่ออ่านเพิ่มเติม


1
ใช่: ช่วยปกติในกลุ่มหรือลิงค์ที่ฉันเพิ่งเพิ่ม
ผู้พิพากษา Maygarden

1
อะไรก็ได้ที่ช่วยผู้ใช้ที่ไม่ใช่ emacs!
ผู้พิพากษา Maygarden

48
มีความสุข !! เคล็ดลับเริ่มต้น: ใช้ V แล้ว j / k เพื่อเน้นบรรทัดที่คุณต้องการจากนั้นพิมพ์เพียง:norm! @a
Kevin Bourrillion

7
หากต้องการเพิ่มเคล็ดลับที่มีประโยชน์มากจาก @KevinBourrillion เมื่อกด:หลังจากไฮไลต์บรรทัดนั้นบรรทัดอินพุต Ex จะอ่านแทน:'<,'>ซึ่งคุณจะเพิ่มส่วนที่เหลือที่เควินแนะนำ :'<,'>norm! @aซึ่งจะทำให้การอ่านคำสั่งสุดท้าย:
Deiwin

3
@GabeMoothart !หลีกเลี่ยงการ remapping ผู้ใช้ของคีย์ คุณอาจไม่ต้องการมัน แต่คำตอบที่เหมาะกับทุกคนต้องการมัน
ผู้พิพากษา Maygarden

60

ใช้ทั่วโลกเพื่อเรียกใช้แมโคร 'a' ในทุกบรรทัดที่มี 'รูปแบบ'

:g/pattern/normal! @a

สำหรับความช่วยเหลือตรวจสอบ: :help global.


4
เพื่อความชัดเจนสำหรับผู้ใช้ในอนาคต: นี่คือคำสั่ง Ex ระดับโลก
atp

39

คุณยังสามารถทำสิ่งนี้:

ในโหมดปกติ:

[number of times to apply the macro] @ [register]

ตัวอย่างเช่น:

1000@q

แอปพลิเคชันแมโครใน register q ไปยังอีก 1,000 บรรทัด

อัปเดต: คำตอบที่ยอมรับนั้นดีกว่ามาก

อัปเดต: เนื่องจาก @kevinliu ชี้ให้เห็นว่าคุณอาจต้องการจบแมโครด้วย a jเพื่อไปที่บรรทัดถัดไป


4
สิ่งนี้จะหยุดที่บรรทัดสุดท้ายและจะไม่ทำงานหลายครั้งในบรรทัดสุดท้ายซึ่งฉันกลัว
Hubro

@Hubro คำตอบเหล่านี้จากผู้ใช้รายอื่นทำงานให้ฉัน: :%norm! @aและvGG :norm! @a
Max Heiber

2
ด้วยเหตุผลบางอย่างสิ่งนี้ใช้ได้ดีมากและคำตอบที่ยอมรับไม่ได้ มาโครของฉันเกี่ยวข้องกับการแทรกบรรทัดใหม่ทำสิ่งต่าง ๆ และย้ายไปยังบรรทัดถัดไป
jasonszhao

@ jasonszhao ใช่เหมือนกันที่นี่ แต่มีอยู่แล้วที่จะไม่พูด 1,000 แต่ทุกบรรทัดจนจบ .. และยังคงดูแลบรรทัดใหม่ทำสิ่งต่าง ๆ และอื่น ๆ
24919

2
ฉันคิดว่ามันควรจะชี้ให้เห็นว่าแมโครของคุณจะต้องจบด้วยjคำสั่งเพื่อลงไปที่บรรทัดถัดไปมิฉะนั้นจะพยายามใช้มันกับบรรทัดเดียวกัน
Kevin Liu

2

นอกจากนี้ยังมีปลั๊กอินที่ชื่อว่า RangeMacro ทำสิ่งที่คุณต้องการ! สำหรับทุกคนที่ไม่สามารถเดาได้ว่าชื่อทำอะไร: มันทำซ้ำแมโครที่บันทึกไว้สำหรับแต่ละบรรทัดในช่วงที่กำหนดไม่ว่าจะด้วยการเลือกด้วยภาพหรือโดย: 40,50 /: +10

ดูhttp://www.vim.org/scripts/script.php?script_id=3271

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