ฉันได้พยายามทำตามสิ่งต่อไปนี้:
วิธีลบข้อความที่เลือกในตัวแก้ไข VI
แต่
5dd
จะช่วยให้
E492: ไม่ใช่คำสั่งเอดิเตอร์: 5dd
ฉันลองแล้ว:
5d
ซึ่งจะลบเพียงบรรทัดเดียว ฉันจะลบหลายบรรทัดได้อย่างไร?
ฉันได้พยายามทำตามสิ่งต่อไปนี้:
วิธีลบข้อความที่เลือกในตัวแก้ไข VI
แต่
5dd
จะช่วยให้
E492: ไม่ใช่คำสั่งเอดิเตอร์: 5dd
ฉันลองแล้ว:
5d
ซึ่งจะลบเพียงบรรทัดเดียว ฉันจะลบหลายบรรทัดได้อย่างไร?
คำตอบ:
ดูเหมือนว่าคุณกำลังป้อนคำสั่งในโหมดคำสั่ง (เรียกอีกอย่างว่า "โหมด Ex") ในบริบท:5d
นั้นจะลบบรรทัดหมายเลข 5 ไม่มีอะไรอื่น สำหรับ5dd
การทำงานตามที่ตั้งใจไว้ - ที่เอาห้าเส้นที่เกิดขึ้นเริ่มต้นที่เคอร์เซอร์ - :
ใส่มันในโหมดปกติและไม่ได้คำนำหน้าคำสั่งด้วย
หาง่ายกว่านี้
/superuser/170795/how-can-i-select-and-delete-lines-of-text-in-vi
คุณสามารถลบหลายบรรทัด (ช่วง) ได้หากคุณทราบหมายเลขบรรทัด:
:[start_line_no],[end_line_no]d
หมายเหตุ: d ย่อมาจาก delete
โดยที่
start_line_no คือบรรทัดเริ่มต้นที่คุณไม่ต้องการลบและ end_line_no คือบรรทัดสิ้นสุดที่คุณไม่ต้องการลบ เส้นระหว่างจุดเริ่มต้นและจุดสิ้นสุดรวมถึงจุดเริ่มต้นและจุดสิ้นสุดจะถูกลบออก
เช่น:
:45,101d
บรรทัดระหว่าง 45 ถึง 101 รวมถึง 45 และ 101 จะถูกลบ
$
เพื่อแสดงบรรทัดสุดท้ายในไฟล์ได้เช่นกัน ดังนั้น:45,$d
จะลบทุกบรรทัดตั้งแต่ 45 จนจบ
/<\/div>/
:.,[end_line_no]d
คำสั่งที่แสดงรายการสำหรับใช้ในโหมดปกติ (คำนำหน้า:สำหรับโหมดคำสั่ง)
ผ่านการทดสอบใน Vim
ตามจำนวนบรรทัด:
ตามหมายเลขบรรทัด:
Backwards range given, OK to swap (y/n)?
หากคุณชอบวิธีการใช้โหมดที่ไม่ใช่ภาพและรับทราบหมายเลขบรรทัดฉันขอแนะนำวิธีที่ตรงไปตรงมาให้คุณ
ตัวอย่าง
ฉันต้องการลบข้อความจากบรรทัดที่ 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 |
+---------+----------+--------------------+
d5d "ตัด" ห้าบรรทัด
ฉันมักจะโยนตัวเลขไว้ตรงกลางเช่น:
d7l = ลบ 7 ตัวอักษร
กดEscปุ่มเพื่อให้แน่ใจว่าคุณไม่ได้อยู่ในโหมดแก้ไข วางเคอร์เซอร์บนบรรทัดแรกที่จะลบ :5dd
เข้าสู่ บรรทัดปัจจุบันและสี่บรรทัดถัดไปควรถูกลบ
อีกวิธีหนึ่งหากคุณเปิดการกำหนดหมายเลขบรรทัด ...
กดEscปุ่มเพื่อให้แน่ใจว่าคุณไม่ได้อยู่ในโหมดแก้ไข ป้อน:#,#d
ตำแหน่งที่ '#' หมายถึงหมายเลขบรรทัดเริ่มต้นและสิ้นสุดที่จะลบ
พิมพ์ (สำหรับเส้นที่มีตัวเลข):set number
หากคุณต้องการลบช่วงหลังจากทริกเกอร์บรรทัดเฉพาะคุณสามารถใช้สิ่งนี้ได้
:g/^TMPDIR/ :.,+11d
ที่ลบ 11 เส้น (รวม) ^TMPDIR
หลังจากที่พบของทุก
มันคือ dxd ไม่ใช่ ddx
หากคุณต้องการลบ 5 บรรทัดให้เคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัดแรกเพื่อลบและ d5d
ในการลบบรรทัดทั้งหมดให้ใช้ - ESC gg dG หากต้องการลบไม่กี่บรรทัดให้พูดว่า 5 จากนั้นใช้ ESC 5dd
สามารถทำได้ดังต่อไปนี้ ..