เข้าร่วมบรรทัดระหว่างรูปแบบข้อความบางอย่างในกลุ่ม


8

ฉันมีไฟล์ข้อความซึ่งมีลักษณะดังนี้:

A.
text
text
text


A.
more text

more text

A.
more text

ฉันต้องการเข้าร่วมทุกบรรทัดระหว่าง "เครื่องหมาย" A.เพื่อให้ดูเหมือน:

A.texttexttext
A.more textmore text
A.more text

ฉันจะทำสิ่งนี้ใน Vim ได้อย่างไร

คำตอบ:


4
:%s/\n\(\(A\.$\)\@!.*\)/\1/

แทนการจับคู่รูปแบบ:

  1. ขึ้นบรรทัดใหม่
  2. กลุ่มที่ประกอบด้วย

    1. ไม่ใช่สตริงA.ตามด้วย end-of-line โดยตรงจากนั้น
    2. ตัวละครใด ๆ จนกว่าจะสิ้นสุดบรรทัด

ด้วย:

  • ทุกอย่างตรงกันยกเว้น newline เริ่มต้น (เช่นกลุ่มด้านบน)

และทำสิ่งนี้ทั่วโลก


1
ขอบคุณ ฉันไม่รู้ว่ามันทำงานอย่างไร แต่ดูเหมือนว่าจะ! ฉันจะต้องผ่าอย่างระมัดระวัง ฉันพบการทำงานด้วยการเข้าร่วมทุกบรรทัดแล้วใส่บรรทัดใหม่ใน "A. "
กลุ่ม noob

@vimnoob: ดู:help \@!Vim สำหรับข้อมูลเพิ่มเติมในส่วนนั้น มิฉะนั้นมันจะตรงไปข้างหน้าหวังว่าด้วยคำอธิบายของฉัน ปัญหาเกี่ยวกับวิธีการของคุณคือถ้า " A." เกิดขึ้นในข้อความแม้ว่าจะไม่ได้เป็นเส้นมาร์กเกอร์แบบแยกมันก็จะถูกแยกออกราวกับว่ามันเป็นเครื่องหมายเดิม ในทางปฏิบัติมันอาจไม่เป็นปัญหา (ฉันไม่รู้ว่าไฟล์ "ของจริง" ของคุณเป็นอย่างไร) แต่โดยทั่วไปแล้วมันอาจทำให้เกิดพฤติกรรมที่ไม่พึงประสงค์หากไม่มีใครรู้เรื่องนี้
Daniel Andersson

@ vimnoob: ฉันอ่านคำตอบของฉันอีกครั้งและในกรณีที่คุณไม่คุ้นเคยกับ:%s///ไวยากรณ์: มันเป็น "การค้นหาและแทนที่" ไวยากรณ์ใน Vim :เริ่มต้นคำสั่ง%ระบุบัฟเฟอร์ทั้งหมดเป็นช่วงsเริ่มการทดแทน /เป็นตัวคั่นรูปแบบ (สามารถใช้อักขระอื่นใดก็ได้ แต่/เป็น "มาตรฐาน") ครั้งแรกที่/เริ่มรูปแบบการค้นหาที่สองรูปแบบการแทนที่และที่สามจบลง ตัวดัดแปลงต่อท้ายพร้อมใช้งานเพื่อระบุตัวพิมพ์เล็กและตัวพิมพ์เล็ก ฯลฯ\1แสดงถึงกลุ่มที่คว้าในรูปแบบการค้นหา :%s/foo/bar/แทนที่fooด้วยbarในไฟล์
Daniel Andersson

ขอบคุณมาก ๆ สำหรับความช่วยเหลือของคุณ. ฉันแค่ต้องค้นคว้า \ \ นี้! ส่วนหนึ่งเพราะฉันคุ้นเคยกับการค้นหาพื้นฐานและ regexp ขั้นพื้นฐาน
กลุ่ม noob

1
@Reman: :%s/^A\.//วิธีที่มากที่สุดตรงไปข้างหน้าฉันทันทีที่คิดจะทำงานตรงกับรูปแบบที่ตามมาระดับโลกเช่น วิธีการในคำตอบไม่ได้จับ^A\.รูปแบบของตัวเอง (แทนที่จะขาด) ดังนั้นจึงไม่สามารถแก้ไขสตริงเหล่านั้นในวิธีที่ชัดเจน
Daniel Andersson

7

สิ่งนี้ยังใช้งานได้ (เมื่อบรรทัดแรกขึ้นต้นด้วยA.)

:v/^A/-1j!

มันใช้งานได้! ดี +1
ZaSter

Yay, verily, และสองเทคนิคใหม่สำหรับฉันหลังจากการแข่งขันต่อต้านรูปแบบทั่วโลก (v): 'j' สำหรับการเข้าร่วมและ '!' สำหรับการเข้าร่วมโดยไม่ต้องเพิ่มช่องว่าง ขอบคุณ.
Fortboise

@Miro ว้าว! ฉันทักทายคุณ ถ้าคุณสามารถอธิบายได้ว่าทำไมมันถึงใช้งานได้ super! .. และฉันก็ต้องต่อสายกับอักขระแท็บระหว่าง ... ดังนั้นสิ่งที่ฉันทำคือการเพิ่มเป็น / $ / \ t / g แท็บ characterat ท้ายของทุกบรรทัดก่อนที่จะออก เหนือคำสั่ง .. วิธีที่ดีกว่า
ihightower
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.