ฉันจะสร้างรายการหมายเลขต่อเนื่องหนึ่งรายการต่อบรรทัดได้อย่างไร


38

เริ่มต้นจากกระดานชนวนว่างเปล่าฉันจะขอรับเอกสารที่มีได้อย่างไร

1
2
3
4
5
6
7
8
9
10
…
100

เพื่อความชัดเจนฉันไม่ต้องการให้ตัวเลขเหล่านี้แสดงในระยะขอบ ฉันต้องการให้พวกเขาแทรกลงในเอกสารของตัวเอง

คำตอบ:



18

นอกเหนือจาก Pure-vim ของ Undo :put =range(1,100)(ซึ่งทำให้คุณว่างเปล่าขึ้นบรรทัดบนสุด) คุณสามารถใช้คำสั่งอย่างใดอย่างหนึ่งทั้งนี้ขึ้นอยู่กับระบบปฏิบัติการของคุณ เช่นในกล่อง Unix / Linux:

%!seq 1 100

การทำงานข้างต้นโดยการไพพ์บัฟเฟอร์ (ว่าง) ทั้งหมดไปseqที่ซึ่งละเว้นอินพุตและเพิ่งส่งออกตัวเลข 1 ถึง 100 จากนั้น Vim จะแทนที่บัฟเฟอร์ทั้งหมดด้วยseqเอาต์พุตของ

มีประโยชน์เมื่อคุณคุ้นเคยกับวิธีสั่งบรรทัดคำสั่งเพื่อให้ได้สิ่งที่คุณต้องการ


นี่คือ "งาน" ซึ่งเป็นคำถามที่ว่าทำไมฉันคิดว่ามันดีกว่าคำถามที่ยอมรับ ใช่คุณสามารถทำให้เป็นกลุ่มทำงานเช่นเดียวกับที่คุณสามารถใช้ประแจวงเดือนเพื่อกวนน้ำซุป Vim เป็นเครื่องมือแก้ไขข้อความไม่ใช่โปรแกรมสร้างข้อความโดยอิสระ มีเครื่องมือที่ชัดเจนมากขึ้นสำหรับการที่
msw

16

สำหรับบันทึกและไม่ใช่วิธีที่สั้นที่สุด (ดูวิธีแก้ปัญหาที่ยอดเยี่ยมของ @ Undo) แต่การเรียงลำดับการกดแป้นก็จะทำเช่นกัน:

i1EscqaYpCtrl+aq98@a

ให้ฉันทำลายมันลงเพื่อคุณ:

  1. i1<Esc> - ใส่หมายเลข 1 จากนั้นกลับสู่โหมดคำสั่ง
  2. qa - เริ่มบันทึกแมโครในการลงทะเบียน "a"
  3. Y - คัดลอกบรรทัดปัจจุบัน
  4. p - วางบรรทัดปัจจุบัน (เคอร์เซอร์จะย้ายไปที่บรรทัดที่วาง)
  5. <Ctrl>a - เพิ่มตัวเลขถัดไปในบรรทัดทำให้เป็น 2
  6. q - หยุดการบันทึกแมโคร (ลงทะเบียน "a")
  7. 98@a - เล่นซ้ำแมโครในรีจิสเตอร์ "a" 98 ครั้ง

4

นี่คือแนวทางที่แตกต่างที่ต้องการ Vim ที่ใหม่กว่า (บางอย่างเช่น 7.4.800)

สิ่งนี้จะถือว่าบัฟเฟอร์ว่างเปล่าและ '1' อยู่ในการลงทะเบียน ก่อนอื่นให้ป้อน 100 1 ลงในบัฟเฟอร์ของคุณ, "a100P.

จากนั้นเลือกบรรทัด 2 จนถึง 100 :2EnterVGด้วยสายตา

ตอนนี้กด+gCtrlA

อ่านความช่วยเหลือได้ที่ :h v_g_CTRL-A


คุณต้องเพิ่ม let @ a = "1" ในคำตอบของคุณ ผู้เริ่มต้นอาจติดขัดเพื่อค้นหาวิธีเก็บค่า 1 ในการลงทะเบียน
SibiCoder

ฉันได้เห็นคอมโบ gCtrl + A ในโซลูชันอื่นที่คล้ายคลึงกัน อย่างไรก็ตามฉันไม่สามารถหาคำอธิบายเกี่ยวกับสิ่งที่กำลังทำ / มันทำงานอย่างไร คุณมีการอ้างอิงในเอกสารประกอบที่อธิบายว่า g ทำอะไรได้บ้าง? ขอบคุณ! หากฉันพบคำอธิบายฉันจะโพสต์
codingFoo

1
เอกสารเป็นเวลา:h g_CTRL-A
Christian Brabandt

ฉันพลาดลิงค์ไปยังส่วน v_g_CTRL-A
codingFoo

2

ฉันรู้ว่าคำถามนี้เก่ามาก แต่ก็มีวิธีอื่นที่คุณสามารถทำได้ ลองสิ่งนี้:

99o<esc>:%s/^/\=line('.')<cr>

99o<esc>จะเปิดขึ้น 100 บรรทัดว่าง จากนั้นเราเรียกใช้คำสั่งทดแทน:

:%                  " On every line
  s/                " substitute
    ^/              " the start of the line. (This will always match no matter what)
      \=            " Evaluate:
        line('.')   " The current line.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.