เป็นกลุ่มลบเทคนิคย้อนหลัง


119
  • หนึ่งลบคำทางซ้ายได้อย่างไร? กล่าวอีกนัยหนึ่งคือลบคำเมื่อเคอร์เซอร์อยู่ที่ส่วนท้ายของคำนั้น
  • หนึ่งลบอักขระที่จุดเริ่มต้นของบรรทัดได้อย่างไร?
  • จะลบไปยังช่องว่างแรกทางซ้ายได้อย่างไร?

  • เทคนิคอื่น ๆ ที่เกี่ยวข้องกับการลบคำหรือไม่?

คำตอบ:


163

โดยทั่วไป d <motion> จะลบจากตำแหน่งปัจจุบันไปยังตำแหน่งสิ้นสุดหลังจาก <motion> ซึ่งหมายความว่า:

  1. d <leftArrow> จะลบอักขระปัจจุบันและตัวซ้าย
  2. d $ จะลบจากตำแหน่งปัจจุบันไปยังจุดสิ้นสุดของบรรทัด
  3. d ^ จะลบจากอักขระย้อนหลังปัจจุบันเป็นอักขระที่ไม่ใช่ช่องว่างสีขาวตัวแรก
  4. d0 จะลบจากปัจจุบันย้อนกลับไปยังจุดเริ่มต้นของบรรทัด
  5. dw ลบปัจจุบันถึงจุดสิ้นสุดของคำปัจจุบัน (รวมถึงช่องว่างต่อท้าย)
  6. db ลบปัจจุบันถึงจุดเริ่มต้นของคำปัจจุบัน

อ่านสิ่งนี้เพื่อเรียนรู้ทุกสิ่งที่คุณสามารถใช้ร่วมกับคำสั่ง 'd'


2
อีกทางลัดที่มีประโยชน์ในกรณีที่คุณdbจำได้ยาก: 5. dw or d<ctrl+rightarrow>และ 6. db or d<ctrl+leftarrow>
Crisboot

7
แทนที่จะพิมพ์d<leftArrow>ทำdhแทนเนื่องจากhเป็นกุญแจสำคัญในการเลื่อนไปทางซ้าย
Dylanthepiguy

4
เหตุใดคำตอบนี้จึงเป็นที่ยอมรับ d <leftArrow> (และไม่ใช่ด้านล่างยกเว้น dw) จะไม่ลบอักขระที่อยู่ใต้เคอร์เซอร์ตามที่ OP ต้องการ
listerreg

74

ฉันอยู่ในสถานการณ์นี้หลายครั้ง ฉันต้องการกำจัดช่องว่างทั้งหมดในบรรทัดที่ 10 ดังนั้นมันจะเข้าร่วมกับบรรทัดที่ 9 หลังเครื่องหมายจุลภาค

ใส่คำอธิบายภาพที่นี่

นี่คือการเข้าร่วมบรรทัดง่ายๆใน VIM

kJ เคล็ดลับไม่ (ดูด้านล่าง)

เป็นกลุ่มเข้าร่วมบรรทัด


10
ฉันมองหาสิ่งนี้ทุกที่!
functionvoid

2
ฮ่าฮ่าฉันต้องการสิ่งนี้และฉันไม่รู้จะอธิบายยังไงใน Google โชคดีจังที่ฉันเลื่อนลง =))
Thai Tran

1
ไม่อยากจะเชื่อเลยว่ากี่ครั้งแล้วที่ฉันทำสิ่งนี้ด้วยตนเอง นี่คือสิ่งที่ฉันกำลังมองหาขอบคุณ!
tobiasandersen

1
นี่คือสิ่งที่ฉันกำลังมองหา Vim พัดใจทุกวัน
singmotor

4
คำอธิบายคือ: k= ขึ้น, J= เข้าร่วมบรรทัดด้านล่างกับบรรทัดปัจจุบันโดยเว้นวรรคระหว่าง คุณสามารถkgJเข้าร่วมได้โดยไม่ต้องเว้นวรรค gJ= เข้าร่วมบรรทัดด้านล่างโดยไม่มีช่องว่างระหว่าง ผ่าน cheatsheet: vim.rtorr.com
KhalilRavanna

31

เพื่อตอบข้อ 3 diwและdawเป็นเลิศ


4
ฉันพบว่ามันน่าเศร้าที่ไม่มีคำสั่งสองตัวอักษรในการลบคำย้อนกลับเมื่อคุณอยู่ที่ตัวอักษรสุดท้ายเพราะในโปรแกรมแก้ไขมาตรฐานเช่น notepad ++, gedit เป็นต้นคุณสามารถใช้ CTRL + Backspace ได้อย่างง่ายดาย ... ยกเว้นจากนั้น เป็นกลุ่มที่ยอดเยี่ยม
itmuckel

3
@ roggan87 หากคุณใช้ตัวอักษรสุดท้ายของคำให้dbลบตัวอักษรที่อยู่หน้าตัวอักษรสุดท้าย แต่ยังคงทิ้งตัวอักษรสุดท้ายไว้
Prashanth Chandra

2
คุณสามารถอธิบายสิ่งที่เป็นiและaกำลังทำอยู่ในตอนกลางของคำสั่งดังกล่าวหรือไม่ ฉันรู้ว่านำหน้าdคือ "ลบ" และฉันคิดว่าคำต่อท้ายwคือ "คำ"
Carl G

1
@CarlG คำอธิบายที่ดีที่สุดอยู่ใน:help text-objects. ย่อหน้านำหน้ามีความกระชับและฉันคิดว่าอธิบายได้ดีมาก
Randy Morris

5
<kbd> i </kbd> คือ "inner" และ <kbd> a </kbd> คือ "a" เช่นเดียวกับ "a word" ก่อนหน้านี้จะไม่รวมการเว้นช่องว่างในขณะที่แบบหลังจะรวมช่องว่างต่อท้ายถ้ามีมิฉะนั้นจะรวมช่องว่างก่อนหน้า มีประโยชน์มากขอบคุณ
Carl G

25

ในโหมดแทรก:

  • ^ W
  • ^ U
  • ไม่สามารถตอบออกจากหัวของฉันได้ ;-)

มิฉะนั้น:

  • ใบสำคัญแสดงสิทธิอนุพันธ์
  • v0x
  • ไม่สามารถตอบออกจากหัวของฉันได้ ;-)

ฉันไม่รู้ว่าฉันสามารถลบคำในโหมดแทรกในกลุ่มได้ สิ่งนี้ช่วยได้มาก
ĐỗTiến

18

ในโหมดคำสั่ง:

  1. bdwกลับลบคำ
  2. d^ (ไปยังช่องแรกที่ไม่ว่างเปล่า) d0 (เป็นอักขระตัวแรก)
  3. BdW (ไปที่ช่องว่างแรกลบไปยังช่องว่างถัดไป)

(วิกิชุมชนอย่าลังเลที่จะแฮ็ค)


14
  1. db (ถ้าเคอร์เซอร์อยู่หลังคำ) หรือ bdw
  2. d0 (หรือ d^ถ้าคุณต้องการลบเป็นอักขระแรกที่ไม่ว่างเปล่า)
  3. dEหรือdtSpaceเพื่อลบไปยังช่องว่างแรกหรือd/\sEnterลบไปยังอักขระช่องว่างถัดไป

แก้ไข

เนื่องจากคำถามมีการเปลี่ยนแปลงดังนั้น 3 จึงถูกลบไปยังอักขระช่องว่างแรกทางด้านซ้ายคำตอบของฉันควรเปลี่ยนเป็น:

  1. dBหรือdShiftTSpaceเพื่อลบกลับไปที่ช่องว่างแรกหรือd?\sEnterเพื่อลบไปยังอักขระช่องว่างก่อนหน้า

ดู:

:help motion.txt
:help WORD

โทรหา # 3 ได้ดี ฉันไม่แน่ใจว่าจะจัดการกับช่องว่างใด ๆ เป็นมูลค่าการกล่าวขวัญว่า dF <SPACE> จะลบและรวม <SPACE> ในขณะที่ dT <SPACE> จะปล่อย <SPACE> ไว้ที่นั่น
Mark Biek

bdwมาที่นี่มองหาสิ่งที่ต้องการ ตัวละครที่เหลือ (เดิมอยู่ใต้เคอร์เซอร์) ของdbฉันทำให้รำคาญ
Deiwin

8

ฉันรู้สึกว่าไม่มีคำตอบใดที่สมบูรณ์:

โดยทั่วไปแล้วคุณมักจะเริ่มต้นดำเนินการลบโดยใช้และไม่ค่อยใช้d<motion>x

หมายเหตุ: เมื่อNไม่ได้ระบุจะทำงานราวกับว่าN=1(ลบถ่านตัวเดียว)

อักขระไม่ต่อเนื่อง:

<N>x - ลบ N ตัวอักษรทางด้านขวา

d<N><left-arrow> - ลบ N ตัวอักษรทางซ้าย

d<N><right-arrow> - ลบ N ตัวอักษรทางด้านขวา

ขอบเขตของคำ:

หมายเหตุ: คำที่นำหน้า / สำเร็จเป็นคำที่ 1 อยู่ใต้เคอร์เซอร์

d<N>b - ลบจากจุดเริ่มต้นของคำ N-th ที่นำหน้าไปยังตำแหน่งปัจจุบัน

d<N>e - ลบจากตำแหน่งปัจจุบันไปยังจุดสิ้นสุดของคำ N-th ที่ประสบความสำเร็จ

d<N>w- เหมือนกับd<N>eแต่รวมถึงช่องว่างต่อท้าย

diw - ลบทั้งคำใต้เคอร์เซอร์

daw- เหมือนกับdiwแต่รวมถึงช่องว่างต่อท้าย

ขอบเขตของเส้น:

d0 - ลบจากจุดเริ่มต้นของบรรทัดไปยังตำแหน่งปัจจุบัน

d^ - ลบจากอักขระที่ไม่ใช่ช่องว่างแรกไปยังตำแหน่งปัจจุบัน

d$ - ลบจากตำแหน่งปัจจุบันไปยังจุดสิ้นสุดของบรรทัด


1

/ <CR>x

(ค้นหาช่องว่างข้างหน้ากด Enter เพื่อไปที่นั่น x เพื่อลบ)

อาจมีวิธีที่วิเศษกว่านี้ แต่ฉันไม่รู้อย่างใดอย่างหนึ่ง


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