จะลบเนื้อหาย้อนหลังจนถึง“ =” ที่บรรทัดก่อนหน้าได้อย่างไร


9

ฉันใช้ตัวอย่างรหัสจาวาสคริปต์:

1        var a = 1;
2        var b = |{};

เคอร์เซอร์อยู่ที่ตำแหน่ง|(บนตัวอักษร "{" เมื่อรูปร่างเคอร์เซอร์เป็นบล็อก) ฉันพบว่าฉันต้องการaกำหนดวัตถุให้ฉันจึงต้องการแก้ไขตามด้านล่าง:

1        var a = {};

ดังนั้นฉันต้องการทราบว่าเมื่อเคอร์เซอร์อยู่ที่ "{" วิธีการลบเนื้อหาทั้งหมดก่อน "{" อย่างรวดเร็วจนกระทั่งช่องว่างหลังเครื่องหมาย "=" ที่บรรทัดที่ 1

ในเครื่องมือแก้ไขทั่วไปอื่น ๆ ฉันจะกดปุ่ม backspace เพื่อลบรหัส แต่ฉันไม่สามารถทำสิ่งนี้ได้เป็นกลุ่ม


คุณสามารถกดiและใช้ปุ่ม Backspace ได้ ร่างกายจะไม่ยิงคุณสำหรับการที่ ฉันคิด.
elyashiv

1
แต่ backspace จะไม่ลบอักขระของบรรทัดด้านบน
Aaron Shen

3
@AaronShen ขึ้นอยู่กับการตั้งค่า 'backspace' ของคุณ ถ้ามันรวมeolแล้ว backspace จะลบตัวแบ่งบรรทัด คุณจะต้องstartรวมอยู่ในการตั้งค่า (ดู:help backspace) อย่าใช้วิธีนี้แม้ว่า! มีวิธีการที่เร็วกว่าหลายวิธีโดยละเอียดในคำตอบด้านล่าง
Rich

คำตอบ:


20

ไม่แน่ใจว่าฉันเข้าใจคำถามทั้งหมดหรือไม่ แต่ถ้าคุณต้องการลบจนกว่าคุณจะมีเพียง var a = {};คุณสามารถทำได้จากตำแหน่งเคอร์เซอร์ใช้d?1Enter

dใช้ความเคลื่อนไหวและคุณสามารถกำหนดรูปแบบการค้นหา/สำหรับการค้นหาไปข้างหน้าหรือการค้นหา?แบบย้อนหลัง

นี่คือ gif ขนาดเล็กที่แสดงให้เห็นถึงสิ่งนี้:

ป้อนคำอธิบายรูปภาพที่นี่


1
มันอาจจะมีมูลค่าการกล่าวขวัญว่าคุณจำเป็นต้องตีหลังการพิมพ์Enter d?1
Rich

@ ขอบคุณแน่นอนฉันได้อัปเดตคำตอบเพื่อรวมที่
akshay

1
เชลล์นั้นใช้แบบอักษรอะไร
Chris Burt-Brown

@ ChrisBurt-Brown: Terminus
akshay

10

หากคุณใช้เสียงเรียกเข้า (และไม่ใช่ classic vi) ในตัวอย่างของคุณคุณสามารถทำได้vkd(หรือvkx)

  • v จะนำมันเข้าสู่โหมด 'visual' (เลือก)
  • k จะเพิ่มขึ้นหนึ่งบรรทัดเพื่อวางเคอร์เซอร์บน '1' เลือกส่วนที่คุณต้องการลบ
  • dหรือxจะลบการเลือก

5

ลบ

สำหรับตัวอย่างที่เฉพาะเจาะจงนี้dgkเป็นหนึ่งในวิธีที่เร็วที่สุดในการทำเช่นนั้น

dคำสั่งเป็นAkshay อธิบายสามารถจะตามมาด้วยการเคลื่อนไหวการลบทุกตัวอักษรระหว่างที่เคอร์เซอร์เริ่มต้นและการเคลื่อนไหวที่จะให้

ในรหัสของคุณคุณต้องการลบทุกอย่างระหว่างตำแหน่งเคอร์เซอร์และคอลัมน์เดียวกันหนึ่งแถวขึ้นไปดังนั้นการเลื่อนเคอร์เซอร์ขึ้นด้านบนด้วยการgkเคลื่อนไหว (ซึ่งเมื่อใช้กับโอเปอเรเตอร์ที่ไม่ใช่แบบ linewise) จะบรรลุเป้าหมายของคุณ

แก้ไข: BobH ชี้ให้เห็นในความคิดเห็นที่วิธีนี้ใช้ได้เฉพาะเมื่อ'wrap'มีการตั้งค่า ด้วยเหตุนี้หากคุณไม่ได้ตั้งค่าการตัดไว้เสมอคุณควรใช้dvkหรือvkdคำตอบอื่น ๆ ในหน้านี้

ลบคำย้อนหลัง

คุณสามารถใช้: d5bหรือd4Bซึ่งจะลบ 5 คำหรือ 4 คำย้อนหลังตามลำดับ ( 1;คือหนึ่งคำ แต่สองคำทั่วไป)


ทำไม dk จะลบทั้งบรรทัดปัจจุบันและเหนือบรรทัดโดยสมบูรณ์
Aaron Shen

@AaronShen Nope ลองมัน.
Rich

1
@ ริชถ้ามันเหมาะกับคุณคุณก็มีการตั้งค่าที่เปิดใช้งานการลบนั้น ฉันเพิ่งทดสอบvim -u NONE -U NONEและลบทั้งสองบรรทัด
Vitor

@Vitor คุณพูดถูก พยายามคิดให้ดีว่าการตั้งค่าแบบไหนตอนนี้
Rich

1
BTW มันกลับกลายgkเป็นว่าใช้ตามที่เห็น:set wrapสมควรตามตัวอักษร(ค่อนข้างเข้ารหัสลับ) ฉันไม่สามารถระบุได้ว่าทำไมสิ่งนี้จึงดูเหมือนว่าใช้ได้กับทุกคน แต่ไม่ใช่สำหรับฉันเมื่อความช่วยเหลือสำหรับgkเช่นนั้นดูเหมือนจะบ่งบอกว่ามันควรจะทำงาน เงื่อนงำเดียวคือความหมายหลักของgkเกี่ยวข้องกับบรรทัดที่พัน เมื่อฉันลองตั้งค่าปิดบน (ชนิดของราชประสงค์), voila มันทำงาน
BobH

1

ฉันยังไม่สามารถแสดงความคิดเห็นได้ดังนั้นฉันต้องตอบคำถามใหม่ ปุ่มที่d kได้รับจาก Rich ไม่ทำงานสำหรับฉันแม้ว่าจะใช้ตัวเลือกที่เข้ากันไม่ได้ เหตุผลอาจเป็นได้ว่าการเคลื่อนที่kนั้นถูกพิจารณาว่าเป็น linewise โดย vim ซึ่งในกรณีนี้จะลบทั้งสองบรรทัด จาก:help d:

ข้อยกเว้นสำหรับคำสั่ง d {motion}: หากการเคลื่อนไหวไม่ใช่ linewise การเริ่มต้นและจุดสิ้นสุดของการเคลื่อนไหวไม่ได้อยู่ในบรรทัดเดียวกันและมีเพียงช่องว่างก่อนการเริ่มต้นและหลังการสิ้นสุดการเคลื่อนไหวการลบจะกลายเป็น linewise ซึ่งหมายความว่าการลบยังลบบรรทัดของช่องว่างที่คุณอาจคาดว่าจะยังคงอยู่ ใช้การ | o_v | ผู้ประกอบการเพื่อบังคับให้การเคลื่อนไหวเป็น characterwise

นอกจากนี้ยังแสดงวิธีการรักษา: ใช้dvkเพื่อบังคับให้การเคลื่อนไหวเป็นตัวละครที่ฉลาด นี่เป็นกลอุบายของฉัน

ฉันไม่เคยรู้จัก o_v มาก่อนดังนั้นนี่คือ:help o_v:

โวลต์

เมื่อใช้งานหลังจากโอเปอเรเตอร์ก่อนคำสั่ง motion: บังคับให้โอเปอเรเตอร์ทำงานในลักษณะตามตัวอักษรรวมทั้งเมื่อมีการเคลื่อนไหว linewise หากการเคลื่อนไหวนั้นเป็นเส้นกำกับมันจะกลายเป็น | เอ็กซ์คลูซีฟ | หากการเคลื่อนไหวนั้นเป็นแบบตัวอักษรให้สลับแบบรวม / เอกสิทธิ์ สามารถใช้เพื่อสร้างการเคลื่อนไหวแบบเอกสิทธิ์เฉพาะบุคคลและการเคลื่อนไหวแบบรวมพิเศษ


สิ่ง 'ที่เข้ากันไม่ได้' เป็นปลาเฮอริ่งแดงที่สมบูรณ์ ฉันสับสนเมื่อฉันทดสอบเพราะฉันเป็นคนงี่เง่า
รวย

เราสามารถใช้ dgk โดยที่ gk นั้นเป็นเอกสิทธิ์และไม่ใช่ linewise
MS.Kim
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.