ฉันจะลบหลายบรรทัดใน vi ได้อย่างไร


130

ฉันได้พยายามทำตามสิ่งต่อไปนี้:

วิธีลบข้อความที่เลือกในตัวแก้ไข VI

แต่

5dd

จะช่วยให้

E492: ไม่ใช่คำสั่งเอดิเตอร์: 5dd

ฉันลองแล้ว:

5d

ซึ่งจะลบเพียงบรรทัดเดียว ฉันจะลบหลายบรรทัดได้อย่างไร?


2
เท่าที่ฉันจำได้ 5dd ควรเป็นไวยากรณ์ที่ถูกต้องและควรลบ 5 บรรทัดโดยเริ่มจากที่เคอร์เซอร์เปิดอยู่ มีโอกาส CAPS LOCK เปิดอยู่และคุณใช้รูปแบบแป้นพิมพ์ที่ทำให้แป้นตัวเลขเลื่อนเมื่ออยู่หรือไม่
Eric J.

คำตอบ:


132

ดูเหมือนว่าคุณกำลังป้อนคำสั่งในโหมดคำสั่ง (เรียกอีกอย่างว่า "โหมด Ex") ในบริบท:5dนั้นจะลบบรรทัดหมายเลข 5 ไม่มีอะไรอื่น สำหรับ5ddการทำงานตามที่ตั้งใจไว้ - ที่เอาห้าเส้นที่เกิดขึ้นเริ่มต้นที่เคอร์เซอร์ - :ใส่มันในโหมดปกติและไม่ได้คำนำหน้าคำสั่งด้วย



143

คุณสามารถลบหลายบรรทัด (ช่วง) ได้หากคุณทราบหมายเลขบรรทัด:

:[start_line_no],[end_line_no]d

หมายเหตุ: d ย่อมาจาก delete

โดยที่
start_line_no คือบรรทัดเริ่มต้นที่คุณไม่ต้องการลบและ end_line_no คือบรรทัดสิ้นสุดที่คุณไม่ต้องการลบ เส้นระหว่างจุดเริ่มต้นและจุดสิ้นสุดรวมถึงจุดเริ่มต้นและจุดสิ้นสุดจะถูกลบออก

เช่น:

:45,101d

บรรทัดระหว่าง 45 ถึง 101 รวมถึง 45 และ 101 จะถูกลบ


14
คุณสามารถใช้$เพื่อแสดงบรรทัดสุดท้ายในไฟล์ได้เช่นกัน ดังนั้น:45,$dจะลบทุกบรรทัดตั้งแต่ 45 จนจบ
freethebees

คุณสามารถใช้รูปแบบเช่น/<\/div>/
Björn

1
หากคุณต้องการเริ่มช่วงจาก lne ที่คุณอยู่คุณสามารถทำได้:.,[end_line_no]d
โจ

15

คำสั่งที่แสดงรายการสำหรับใช้ในโหมดปกติ (คำนำหน้า:สำหรับโหมดคำสั่ง)
ผ่านการทดสอบใน Vim

ตามจำนวนบรรทัด:

  • numdd - จะลบเส้นnumลงนับเริ่มต้นจากตำแหน่งเคอร์เซอร์ปัจจุบัน (เช่น5ddจะลบบรรทัดปัจจุบันและ 4 บรรทัดข้างใต้ => ลบบรรทัดปัจจุบันและ ( num-1 ) บรรทัดที่อยู่ข้างใต้ )
  • numdk - จะลบบรรทัดnum UP จากบรรทัดปัจจุบันและบรรทัดปัจจุบันเอง (เช่น3dkจะลบบรรทัดปัจจุบันและ 3 บรรทัดด้านบน => ลบบรรทัดปัจจุบันและบรรทัดnumด้านบน )

ตามหมายเลขบรรทัด:

  • dnumG - จะลบบรรทัดจากบรรทัดปัจจุบัน (รวม) UP เป็นหมายเลขบรรทัดnum (รวม) (เช่นถ้าเคอร์เซอร์อยู่ในบรรทัดที่ 5 d2Gจะลบบรรทัด 2-5 รวม)
  • dnumgg - จะลบบรรทัดจากบรรทัดปัจจุบัน (รวม) DOWN ไปยังหมายเลขบรรทัดnum (รวม) (เช่นถ้าเคอร์เซอร์อยู่ในบรรทัดที่ 2 d6ggจะลบบรรทัด 2-6 รวม)
  • ( โหมดคำสั่งเท่านั้น ) :num1 ,num2d - จะลบเส้นหมายเลขบรรทัดnum1 (รวม) ลงไปที่หมายเลขบรรทัดnum2 (รวม) หมายเหตุ: ถ้าnum1มากกว่าnum2 - vim จะตอบสนองด้วยBackwards range given, OK to swap (y/n)?

1
สิ่งนี้ช่วยฉันได้เพราะฉันไม่ทราบว่า num 'd' 'd' พยายามลบด้านล่างเคอร์เซอร์ ฉันมีเคอร์เซอร์อยู่ที่ด้านล่างของไฟล์พยายามลบบรรทัดเหนือเคอร์เซอร์ของฉัน! ขอบคุณสำหรับความช่วยเหลือ!
Jonathan Chad Faling

การลบโดย linenumber: ': <start>, $ d' จะลบออกไปจนจบไฟล์
Devolus

11

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

ตัวอย่าง

ฉันต้องการลบข้อความจากบรรทัดที่ 45 ถึงบรรทัดที่ 101

วิธีของฉันแนะนำให้คุณพิมพ์คำสั่งด้านล่างในโหมดคำสั่ง:

45Gd101G

มันอ่าน:

ไปที่บรรทัด 45 ( 45G) จากนั้นลบข้อความ ( d) จากบรรทัดปัจจุบันไปยังบรรทัด 101 ( 101G)

โปรดทราบว่าvimคุณอาจใช้ggแทนG.

เปรียบเทียบกับคำตอบของ @Bonnie Varghese ซึ่งก็คือ:

:45,101d[enter]

คำสั่งด้านบนจากคำตอบของเขาต้องพิมพ์ 9 ครั้งenterโดยที่คำตอบของฉันต้องพิมพ์ 8-10 ครั้ง ดังนั้นความเร็วของวิธีการของฉันจึงเปรียบได้

โดยส่วนตัวแล้วฉันชอบ45Gd101Gมากกว่า:45,101dเพราะฉันชอบที่จะยึดติดกับไวยากรณ์ของคำสั่งของ vi ในกรณีนี้คือ:

+---------+----------+--------------------+
| syntax  | <motion> | <operator><motion> |
+---------+----------+--------------------+
| command |   45G    |        d101G       |
+---------+----------+--------------------+

8

d5d "ตัด" ห้าบรรทัด

ฉันมักจะโยนตัวเลขไว้ตรงกลางเช่น:

d7l = ลบ 7 ตัวอักษร


7

กดEscปุ่มเพื่อให้แน่ใจว่าคุณไม่ได้อยู่ในโหมดแก้ไข วางเคอร์เซอร์บนบรรทัดแรกที่จะลบ :5ddเข้าสู่ บรรทัดปัจจุบันและสี่บรรทัดถัดไปควรถูกลบ

อีกวิธีหนึ่งหากคุณเปิดการกำหนดหมายเลขบรรทัด ...

กดEscปุ่มเพื่อให้แน่ใจว่าคุณไม่ได้อยู่ในโหมดแก้ไข ป้อน:#,#dตำแหน่งที่ '#' หมายถึงหมายเลขบรรทัดเริ่มต้นและสิ้นสุดที่จะลบ


ฉันไม่คิดว่ามันจะทำงานร่วมกับลำไส้ใหญ่ในช่วงเริ่มต้น
Outcast

@PoeteMaudit เป็นคำสั่ง vi ที่ถูกต้อง เครื่องหมายจุดคู่ทำให้ vi เลื่อนเคอร์เซอร์ไปที่ด้านล่างของหน้าจอและยอมรับคำสั่งตัวแก้ไขบรรทัด
Kenster

5
  1. Esc เพื่อออกจากโหมดแทรก
  2. :1enter ไปที่บรรทัด 1 (แทนที่ '1' ด้วยบรรทัดที่คุณสนใจ)
  3. 5dd ลบ 5 บรรทัด (จากบรรทัดปัจจุบัน)

พิมพ์ (สำหรับเส้นที่มีตัวเลข):set number


3

หากคุณต้องการลบช่วงหลังจากทริกเกอร์บรรทัดเฉพาะคุณสามารถใช้สิ่งนี้ได้

:g/^TMPDIR/ :.,+11d

ที่ลบ 11 เส้น (รวม) ^TMPDIRหลังจากที่พบของทุก


0

มันคือ dxd ไม่ใช่ ddx

หากคุณต้องการลบ 5 บรรทัดให้เคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัดแรกเพื่อลบและ d5d


0

ในการลบบรรทัดทั้งหมดให้ใช้ - ESC gg dG หากต้องการลบไม่กี่บรรทัดให้พูดว่า 5 จากนั้นใช้ ESC 5dd


-1

สามารถทำได้ดังต่อไปนี้ ..

  1. วางเคอร์เซอร์ในตำแหน่งที่คุณต้องการลบ
  2. กด "v" เพื่อเริ่มการเลือกภาพ
  3. นำเคอร์เซอร์ไปที่ตำแหน่งที่คุณต้องการลบโดยใช้ปุ่มลูกศร
  4. กด "d" ซึ่งจะลบบรรทัด
  5. ตอนนี้บันทึกและออกโดยใช้ ": x!"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.