ลบจากเคอร์เซอร์จนถึงจุดสิ้นสุดของบรรทัดที่ VI


301

ฉันรู้ว่าฉันได้ดูเอกสาร VI ทั้งหมดนี้เป็นล้านครั้งแล้ว แต่ฉันดูเหมือนจะไม่พบคำสั่งลบจากเคอร์เซอร์ไปยังจุดสิ้นสุดบรรทัด


3
คุณพิมพ์ผิดที่นี่ - คุณพูดว่า "ท้ายบรรทัด" ในชื่อเรื่อง แต่ "จบคำ" ในคำถาม
Cascabel

คำตอบ:


449

คำสั่งdwจะลบจากตำแหน่งเคอร์เซอร์ปัจจุบันไปยังจุดเริ่มต้นของอักขระคำถัดไป คำสั่งd$(หมายเหตุนั่นคือเครื่องหมายดอลลาร์ไม่ใช่ 'S') จะลบจากตำแหน่งเคอร์เซอร์ปัจจุบันไปยังจุดสิ้นสุดของบรรทัดปัจจุบัน เป็นคำพ้องสำหรับDd$


ใช่ฉันรู้dwแต่ฉันเดาว่าฉันแค่คิดว่าจะมีคำสั่ง "ลบส่วนที่เหลือของบรรทัดนี้" ยกตัวอย่างเช่นบรรทัดของฉันมีip=|10.1.1.1กับ|การเป็นที่ตั้งของเคอร์เซอร์ มีคำสั่งที่จะลบทั้งหมด10.1.1.1หรือไม่
Falmarri

3
@Falmarri - ฉันขอโทษฉันต้องเข้าใจผิดคำถามของคุณ มีคำสั่งสำหรับที่:d$
Tok

84
D (Shift + d) ก็เหมือนกันสำหรับ d $
Neth

5
@Andy งานคือการลบจากเคอร์เซอร์ไปยังจุดสิ้นสุดของบรรทัด หากคุณพิจารณาการลบมากขึ้นกว่าที่จะ "ทำงาน" คุณยังสามารถใช้เพียงแล้ว:!rm -f % :q!นั่นเป็นการลบไฟล์ทั้งหมด
Wildcard

2
@Amir เพียงใช้d^('d' + คาเร็ต) ... โดยทั่วไป d + ตัวละครใด ๆ ที่ปกติจะย้ายเคอร์เซอร์ฉันคิดว่า แต่ฉันกำลังเรียนรู้กลุ่มตัวเองดังนั้นฉันอาจจะผิดที่
JakeD

41

ตามที่คนอื่น ๆ พูดถึง: คุณสามารถใช้d$หรือD( shift- d) เพื่อลบออกจากตำแหน่งเคอร์เซอร์จนถึงจุดสิ้นสุดของบรรทัด

สิ่งที่ฉันมักพบว่ามีประโยชน์มากกว่าคือc$หรือC( shift- c) เพราะมันจะลบออกจากตำแหน่งเคอร์เซอร์จนถึงจุดสิ้นสุดของบรรทัดและนำคุณเข้าสู่โหมด [INSERT]


2
NICE !!! นี่เป็นสิ่งที่ดีกว่าDสำหรับคนส่วนใหญ่ในความคิดของฉันเพราะมันจะไม่ย้ายคุณกลับไปที่ช่องว่างท้ายบรรทัด
Elijah Lynn

ทำไมคำตอบนี้ถูกซ่อนอยู่ตลอดทางจนถึงที่นี่? นี่คือฟังก์ชั่นที่ฉันกำลังมองหาเมื่อฉันมาที่นี่จริงๆ
M_M

@ElijahLynn ไม่ควรมีปัญหาอยู่ดี เป็นกลุ่มมีสองวิธีหลักในการเข้าสู่โหมดiแทรกซึ่งแทรกก่อนเคอร์เซอร์และaที่แทรกหลังเคอร์เซอร์ aหากเคอร์เซอร์ของคุณอยู่ที่ท้ายบรรทัดและคุณต้องการแทรกที่ท้ายบรรทัดที่คุณก็สามารถใช้
Lie Ryan

1
เป้าหมายคือการดำเนินการในการดำเนินการหนึ่งไม่ใช่สอง ปุ่มแป้นพิเศษ = แรงเสียดทานพิเศษ
เอลียาห์ลินน์

36

หนึ่งในสิ่งที่ดีเกี่ยวกับ vi คือโครงสร้างคำสั่งแบบลอจิคัล dตามด้วยคำสั่งการเคลื่อนไหวd eletes ไปยังเป้าหมายของการเคลื่อนไหวนั้น $ย้ายไปยังจุดสิ้นสุดของบรรทัด (mnemonic: like in regexps) ดังนั้นd$ลบไปยังจุดสิ้นสุดของบรรทัด ในทำนองเดียวกันการeย้ายไปยังอีครั้งของคำในปัจจุบันและwย้ายไปยังจุดเริ่มต้นของถัดไปWอ๊อด; ดังนั้นdeจะลบจุดสิ้นสุดของคำปัจจุบันและdwลบช่องว่างต่อไปนี้เพิ่มเติม


1
@gioele ฉันใช้<kbd>สำหรับปุ่มจริงไม่ใช่สำหรับลำดับคำสั่ง เช่นแต่<kbd>Ctrl</kbd>+<kbd>C</kbd> d$
Gilles

@Gilles คุณถูกต้อง ฉันเพิ่งลอง d ^ และลบออกจากตำแหน่งเคอร์เซอร์จนถึงบรรทัดเริ่มต้น
ka3ak

ฉันใช้เสมอ (d) elete (a) (w) ord สำหรับการลบคำ :)
Błażej Michalik

20

คุณอาจต้องการใช้ D. เลื่อนเคอร์เซอร์ไปที่อักขระตัวแรกที่คุณต้องการลบจากนั้นกด Shift-D ทุกอย่างหายไป ที่จริงมันอยู่ในบัฟเฟอร์การตัดเริ่มต้นดังนั้นคุณสามารถ P หรือ p วางกลับมา

ฉันใช้ Dp (ลบไปยังจุดสิ้นสุดของบรรทัดจากนั้นนำกลับมาใหม่) ย้ายไปยังจุดสิ้นสุดของบรรทัดอื่นแล้ว p อีกครั้งเพื่อวางข้อความเดียวกันในตอนท้ายของบรรทัดนี้ ใช้งานสิ่งมหัศจรรย์ในไฟล์กำหนดค่าได้โดยที่คุณต้องใส่ URL ที่ซับซ้อนไว้ในที่สองแห่งขึ้นไป


อาจเป็นเสียงเรียกเข้าน้อยที่สุดที่เขาใช้อยู่ดี
polemon

0

ฉันคิดว่าช็อตคัตโหมดแทรกอาจมีประโยชน์

ในโหมดแทรกอาจจะเป็นการดีกว่าที่จะเริ่มเปลี่ยนจนกระทั่งถึงจุดสิ้นสุดบรรทัด (วางสิ่งนี้ไว้บนของคุณ~/.vimrc):

inoremap <C-l> <C-o>C

ดังที่คุณได้กล่าวไว้DในโหมดปกติและCtrl+ lในโหมดแทรก อย่างที่คุณเห็นคุณมีเช่นกันCที่เริ่มเปลี่ยนไปจนจบบรรทัด

<C-o> ......... insert normal keystroke in insert mode

ฉันได้เลือกCtrl- lเพราะlอยู่ภายใต้มือของคุณ The Ctrl- kใช้สำหรับแทรก digraphs ไปแล้ว

ฉันได้ค้นหาผ่าน:h i_Ctrlการโยงคีย์ฟรีและเป็นปัญหาใหญ่กว่าเมื่อมันมาถึงการสร้างทางลัดใหม่เพื่อดำเนินการในกลุ่ม


0

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

เช่นสำหรับข้อความต่อไปนี้ (เคอร์เซอร์แทนด้วย|),

If there's a cursor |in the line
here
we
go

การใช้คำสั่ง3Dจะส่งออก:

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