วิธีการเข้าร่วมทุกบรรทัดที่สองในกลุ่ม?


27

ฉันต้องการที่จะเข้าร่วมจำนวนมาก (~ 1,000) บรรทัด แต่ทุกคี่กับหน้าถัดไป ด้วยมือฉันสามารถทำ

Jj

500 เท่าและทำเสร็จแล้ว อย่างไรก็ตามฉันจะรันคำสั่งทั้งสองนี้ได้ 500 ครั้งในคำสั่งเดียวได้อย่างไร การพิมพ์

500Jj

จะเข้าร่วม 500 บรรทัดถัดไปจากนั้นเลื่อนลงหนึ่งบรรทัด

ตัวอย่าง:

ฉันมี:

a
b
c
d
e
f
g
h

ฉันต้องการ:

a b
c d
e f
g h

แก้ไข:ฉันพยายามทำแผนที่:

:map X Jj
500X

แต่เห็นได้ชัดว่าฉันควรอ่านเอกสารการทำแผนที่อีกครั้ง ใช้งานไม่ได้

คำตอบ:


30

ฉันจะทำสิ่งนี้:

  1. เริ่มบันทึกแมโคร 'q': qqJjq

  2. เล่นมาโครใหม่ 'q' 500 ครั้ง: 500@q

(อันที่จริงมันไม่ใช่มาโครที่เรียกว่า 'q' แต่เป็นชื่อรีจิสเตอร์ที่เรียกว่า 'q' แทนการเติมข้อมูลลงทะเบียนแบบโต้ตอบใน 1 คุณสามารถทำได้:let @q = "Jj"และทำ 2. )


เยี่ยมยอดขอบคุณที่จดจำมาโครให้ฉัน!
Boldewyn

:% ปกติ J นั้นง่ายและรวดเร็วมาก (ดูโซลูชันอันดับ 2 ด้านล่าง) ... เปรียบเทียบกับโซลูชันมาโครนี้ที่ใช้งานบน 50,000 บรรทัด
ihightower

@hightower นั่นเป็นเหตุผลที่ฉัน upvoted คำตอบนั้นเช่นกัน 6 ปีที่แล้ว :)
akira

@akira แมโครของคุณเพิ่งบันทึกวันของฉันเพราะฉันต้องการเพียงแค่โซลูชันแมโครนี้ในวันนี้เพื่อวัตถุประสงค์อื่น
ihightower

24

เมื่อต้องการทำสิ่งนี้กับทุกบรรทัดของไฟล์:

:%normal J

หรือสั้นกว่า:

:%norm J

ในการทำเช่นนี้กับไฟล์เพียงบางส่วนให้เลือกบรรทัดด้วยVหรือรับช่วงด้วยวิธีอื่น:

:'<,'>global/^/normal J

หรือสั้นกว่า:

:'<,'>g/^/norm J

เควินเขาต้องการเรียกใช้คำสั่งสองคำสั่งในทุกไฟล์ไม่ใช่เพียงคำสั่งเดียว
JNK

1
การใช้:gคำตอบ OP ต้องการ
Luc Hermitte

2
นี้จะเข้าร่วมทุกบรรทัดที่สองแน่นอน ลองมัน!
Kevin Panko

ขอบคุณสำหรับglobalเคล็ดลับ ในกรณีของฉันการบันทึกแมโครทำได้ง่ายและเร็วขึ้น
Boldewyn

2
แค่เดา ​​- มันจะรันคำสั่งในแต่ละบรรทัดตามลำดับและหลังจากทำบรรทัดแรกตอนนี้บรรทัดที่สองก็หายไป (เมื่อรวมกับบรรทัดแรก) ดังนั้นจึงถูกบังคับให้ย้ายไปยังบรรทัดที่สาม
Kevin Panko

8

เกี่ยวกับสิ่งนี้:

:g/$/j  

หรือ

:g/$/j!  

และจัดกลุ่มทุกสามบรรทัด

:g/$/j3 

1
นี่เป็นทางออกที่ดีมากของมิโร่ จะดียิ่งขึ้นถ้าคุณสามารถใช้สิ่งนี้ในมาตรฐาน vi เช่นกันแม้ว่าจะแปลกเมื่อคุณใช้หมายเลขต่อท้ายใน SVR4.0 vi (เช่นเดียวกับ Solaris) แทนที่จะเป็น j3 ที่สร้าง 3 คอลัมน์จะทำให้ 4 (ดังนั้นคุณต้องใช้ j2 อยู่ที่นั่นเพื่อจัดกลุ่มทุก 3 บรรทัด)
JohnGH


-1

ฉันไม่ใช่ผู้ใช้ Vim แต่ตรวจสอบเอกสารออนไลน์ที่ดูเหมือนว่า

500(Jj) 

อาจทำงานได้เนื่องจากแยกวิเคราะห์สิ่งที่อยู่ในวงเล็บเป็นหน่วย


อืมขอบคุณสำหรับการลอง แต่ในเวอร์ชั่นของฉัน Vim ก็ไม่สนใจวงเล็บ คุณช่วยบอกฉันลิงค์ที่คุณพบไวยากรณ์นี้ได้หรือไม่
Boldewyn

1
vimdoc.sourceforge.net/htmldoc/syntax.html - ขออภัยที่ไม่ได้ช่วย!
JNK

ตรวจสอบลิงค์นี้จริง ๆ : vim.org/scripts/script.php?script_id=2136 ดูว่านั่นเป็นสิ่งที่คุณทำ
JNK
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.