ลบ 100 บรรทัดจากตัวแก้ไข vi โดยใช้คำสั่งเดียว


33

ฉันใช้ Ubuntu และพยายามลบทั้ง 100 บรรทัดออกจากตัวviแก้ไข แต่ฉันได้รับคำถามสัมภาษณ์เกี่ยวกับการทำสิ่งนี้ในคำสั่งเดียว


ไม่ใช่โซลูชัน VI แต่จากบรรทัดคำสั่ง: echo -n > <file>ลบบรรทัดทั้งหมดออกจากไฟล์ (อันที่จริงแล้วเพียงแค่เขียนทับไฟล์ด้วย "")
azz

3
@Der ไม่จำเป็นต้องใช้echoเลย > $fileทำงานได้ดี
CVn

4
บริษัท แบบไหนที่ถามคำถามเกี่ยวกับviการสัมภาษณ์?
CVn

2
คำถามนี้ตอบได้อย่างง่ายดายด้วยความรู้พื้นฐานของ vi บนคอมพิวเตอร์ที่ติดตั้ง vim ไว้ (บน Ubuntu ฉันขอแนะนำvim-gtkแพ็คเกจเนื่องจากให้คุณเข้าถึง xclipboard ภายใน vim) ให้พิมพ์vimtutorที่บรรทัดคำสั่ง (ไม่ใช่ภายใน vim) เพื่อรับการสอนพื้นฐานแบบอินเทอร์แอคทีฟ ไม่ควรใช้เวลาเกินครึ่งชั่วโมงและเป็นคู่มือเริ่มต้นที่ดีที่สุดในการใช้ vi / vim ที่คุณน่าจะพบ
evilsoup

1
@ MichaelKjörlingฉันนึกภาพออกมาได้ในการสัมภาษณ์ถ้าผู้สมัครได้กล่าวถึงประสบการณ์ก่อนหน้านี้ด้วยvi(ด้วยวาจาหรือกลับมาทำงานต่อ) หรือหากคำถามถูกนำไปใช้กับ "โอเคในฐานะผู้ดูแลระบบคุณต้องรู้อะไรบ้างจากบรรณาธิการบรรทัดคำสั่งใช่ คุณเคยใช้viเหรอ? "
Wildcard

คำตอบ:


62

ในโหมดปกติให้ทำ

100dd

ddลบบรรทัดปัจจุบัน การนำหน้าคำสั่ง100นั้นล่วงหน้าด้วยสาเหตุที่ทำให้คำสั่งนั้นซ้ำ 100 ครั้ง

หากมีน้อยกว่า 100 บรรทัดในไฟล์ที่เริ่มต้นจากบรรทัดปัจจุบันขึ้นอยู่กับการviใช้งานมันจะล้มเหลวในการลบใด ๆ หรือลบมากที่สุดเท่าที่มี ในกรณีvimที่ขึ้นอยู่กับว่าตัวเลือกcpaka compatibleเปิดอยู่หรือไม่


ผิด anwser มันเป็นเพียงการลบบรรทัดปัจจุบัน
Mayur Mehta

ฉันต้องการลบ 100 บรรทัดโดยใช้คำสั่งเดียวในคราวเดียว
mayur Mehta

13
100ddเป็นคำตอบที่ถูกต้อง ฉันสงสัยว่าคุณกำลังทำอะไร
ott--

1
@mayurMehta ไม่รู้ว่า บริษัท ไหนถามคำถามแบบนี้และไม่รู้ว่าพวกเขาคาดหวังว่าจะได้รับคำตอบอย่างไร แต่ผู้ใช้มือใหม่ VI จะรู้ว่า 100dd เป็นคำตอบที่ถูกต้อง
Munim

1
@ vgoff ฉันไม่รู้ .. หากพวกเขาไม่ได้มองหาวิธีการทั่วไปในการทดสอบทักษะพื้นฐานของคุณแล้วมันเป็นเพียงคำถามที่หลอกลวงให้สัมภาษณ์ตอไม้ ฉันจะบอกว่า 100dd คือคำตอบ หากผู้สัมภาษณ์ถามว่า "จะเกิดอะไรขึ้นหากไฟล์มีเคอร์เซอร์ปัจจุบันน้อยกว่า 100 บรรทัด?" ฉันจะตอบว่า: "คำสั่งจะลบสิ่งที่สามารถทำได้จากเคอร์เซอร์ปัจจุบัน" นั่นเป็นเหตุผลที่สมบูรณ์แบบ หากผู้สัมภาษณ์ไม่ชี้แจงสาเหตุที่เคอร์เซอร์ไม่อยู่ในบรรทัดแรก ฉันเกลียดคำถามเล่ห์เหลี่ยมเช่นนี้
Munim

44
  1. ลบ 100 บรรทัดไปข้างหน้าจาก (รวม) บรรทัดปัจจุบัน

    • ทำซ้ำ dd (ลบบรรทัดปัจจุบัน) 100 ครั้ง:

      100dd
      
    • ลบจากบรรทัดปัจจุบันไปยัง 99 บรรทัดไปข้างหน้า

      d99j
      
  2. ลบ 100 บรรทัดย้อนกลับจาก (รวม) บรรทัดปัจจุบัน

    d99k
    
  3. ลบบรรทัดในช่วงที่ระบุตามหมายเลขบรรทัด

    :1,100d
    
  4. ลบบรรทัดในช่วงที่ขึ้นต้นด้วยบรรทัดปัจจุบัน

    :.,.+99d
    

ฯลฯ


2
หมายเลข 4 จะลบบรรทัดปัจจุบัน (0) จนถึง 101 (0 + 100) บรรทัดดังนั้น 101 บรรทัดแทนที่จะถาม 100 ลอง:.,+99d
Olivier Dulac

Drat และฉันได้การเคลื่อนไหวที่ถูกต้อง! ขอบคุณ
ไร้ประโยชน์

100dd ไม่ทำงานสำหรับฉันเช่นกัน - แต่ # 4 ด้านบนใช้งานได้ดีสำหรับฉันใน VI ภายใต้ Solaris 10
DemiSheep

8

หากบรรทัดทั้งหมดในไฟล์ถูกลบคำสั่ง vi นี้ระบุช่วงของการลบ:

:1,$d

1หมายถึงบรรทัดแรกและ $หมายถึงบรรทัดสุดท้าย


หรือ:%d (ใน ":" บริบท ":% ... " เป็นทางลัดสำหรับ ": 1, $ ... ")
Olivier Dulac

ยังดี: d Gปุ่ม & rarr; ฆ่าเนื้อหาทั้งหมดที่เกิดขึ้นจริงจาก [เช่นบรรทัดบนสุด] บรรทัดด้านล่าง
erch

3

คุณต้องการลบบรรทัดทั้งหมดในไฟล์หรือไม่? viเปิดแฟ้มที่มี ในขณะที่จุดเริ่มต้นของบรรทัดแรก - ที่ตั้งเริ่มต้นของเคอร์เซอร์เมื่อคุณเพียงแค่เปิดไฟล์ - กดตามด้วยEscdG

เพียงแค่ต้องทราบการกระทำdบ่งบอกถึงการลบและGบ่งชี้บรรทัดสุดท้ายของไฟล์ ดังนั้นในขณะที่คุณกดบรรทัดใด ๆdGมันจะลบบรรทัดทั้งหมดที่เริ่มต้นจากบรรทัดปัจจุบันจนถึงบรรทัดสุดท้าย

หากคุณทราบว่าสายที่ต่อเนื่องกันเพื่อลบ - พูดจากบรรทัด 101-200 - Esc:101,200dพิมพ์ในลำดับที่สำคัญดังต่อไปนี้:


ไม่จำเป็นต้องกดปุ่มหลบหนีหากคุณเพิ่งเปิดไฟล์และอยู่ที่จุดเริ่มต้นของไฟล์ คุณเป็นอัตโนมัติ (โดยค่าเริ่มต้น) ในโหมดปกติ
vgoff

3

ไม่ว่าคุณจะอยู่ที่ไหนในไฟล์คุณสามารถทำได้ ggdG

:%dจะทำได้ดีกว่าในการกดปุ่มน้อยกว่า ทีนี้การนับshiftและenterคีย์จริง ๆ แล้วมีการกดปุ่มสองปุ่มมากกว่าด้านบน

การทำสิ่งที่ต้องการ100ddจะลบได้สูงสุด 100 บรรทัดจากตำแหน่งที่คุณอยู่ซึ่งอาจไม่สามารถลบบรรทัดทั้งหมดออกจากไฟล์ได้ทั้งนี้ขึ้นอยู่กับตำแหน่งบรรทัดปัจจุบันของคุณ


0

Esc n dd n คือจำนวนบรรทัดที่จะลบออกและรวมถึงบรรทัดปัจจุบัน กดปุ่ม "Esc" จากนั้นเลือก "n" และ "dd" เพื่อความเข้าใจที่ดีขึ้น


อะไรคือสิ่งจำเป็นสำหรับการหลบหนีที่นี่
Prvt_Yadav

คำตอบนี้เหมือนกับคำตอบที่ยอมรับ
Kusalananda

Escape เป็นเพียงในกรณีที่คุณอยู่ในโหมดแทรก
Rida Abid
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.