จะลบคำและเข้าสู่โหมดแทรกใน Vim ได้อย่างไร?


99

ในโหมดปกติฉันสามารถกดCtrl+ Eซึ่งจะลบส่วนที่เหลือของคำปัจจุบันและไปที่โหมดแทรก

ฉันต้องการลบทั้งคำโดยไม่คำนึงถึงตำแหน่งเคอร์เซอร์ (ภายในคำนั้นแน่นอน)

คำตอบ:


168

คุณสามารถใช้ "เปลี่ยนคำภายใน" โดยพิมพ์ "ciw" เพื่อลบคำที่เคอร์เซอร์ของคุณเปิดอยู่

คำสั่ง "inner" และ "a" นั้นยอดเยี่ยมใน Vim ลองใช้ "ci {" ใน {} block หรือ "ca {" หากคุณต้องการลบอักขระ {} ตัวด้วย หากต้องการแปลคำสั่งเหล่านี้เป็นภาษาอังกฤษเพื่อให้จำได้ดีขึ้นให้ลอง: "change inner {block" และ "change a {block"

เอกสารประกอบที่http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects


"caw" สามารถใช้แทนฟังก์ชันเดียวกัน "ciw" ได้
Amjith

ในขณะที่ 'caw' และ 'ciw' จะแทนที่ทั้งคำเพียงแค่ 'cw' จะเปลี่ยนจากตำแหน่งเคอร์เซอร์ปัจจุบันไปยังจุดสิ้นสุดของคำปัจจุบัน
Drew Stephens

ฉันแก้ไขคำตอบจากการบอกเกี่ยวกับ "co {" เป็น "ca {" ตามที่เตือนโดยความคิดเห็น jinxed_coders การปรับแต่งแบบเก่าของฉันใช้คำสั่ง "(a) <>" เป็นคำสั่ง "(o) มดลูก <>"
Kaali

19
ciwและcawไม่เหมือนกันทุกประการ: ciwลบเฉพาะคำcawลบช่องว่างต่อท้ายด้วย
Roberto Bonvallet

5
: ช่วยให้ออบเจ็กต์เป็นกลุ่มเพื่ออ่านเพิ่มเติมเกี่ยวกับการเลือกประเภทนี้
Aaron

19

ตอบคำถามติดตามของคุณ: viwp

v    -> start visual mode
iw   -> select the 'inner word'
p    -> paste - in visual mode it replaces the visually selected text.

3
จะทำแบบนี้หลาย ๆ ครั้งติดต่อกันได้อย่างไร? ทุกครั้งที่คุณวางบัฟเฟอร์จะเติมคำที่ฉันวางทับ
Ben Gartner

1
@BenGartner พบนี้ที่เป็นกลุ่มเคล็ดลับวิกิพีเดีย : ใช้ในการคัดลอกคำปัจจุบันวางเคอร์เซอร์บนคำที่จะเปลี่ยนการใช้งานyiw ciw<C-r>0หลังจากนั้นคุณสามารถวางเคอร์เซอร์บนคำถัดไปและใช้.เพื่อแทนที่ซ้ำ
siegi

@BenGartner หากสิ่งที่คุณกำลังพยายามที่จะทำคือแทนที่ทุกกรณี WORD_A กับ WORD_B :%s/a/b/gแล้วคุณก็ใช้โหมดอดีตเป็นกลุ่มของ aอาจเป็นข้อความที่แน่นอนหรือการแสดงออกปกติและbเป็นสิ่งที่คุณจะเข้ามาแทนที่การแข่งขันทั้งหมดaที่มี คุณสามารถทดสอบ regexes ด้วย/โหมดvim แทนที่%ด้วยหมายเลขบรรทัดหรือช่วงหากคุณไม่ต้องการแทนที่ในทุกบรรทัด
Braden Best

8

สำหรับคำถามที่สอง: bPldw

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


5
นอกจากนี้ยังลบช่องว่างหลังคำ bPldeควรจะเป็น
0x89

10
ไม่ควรจะเป็นviwp
aehlke

3

สำหรับคำถามแรกbcwทำงานด้วย หมายความว่า " back ไปที่จุดเริ่มต้นของคำchange word" แต่ฉันคิดว่าciwน่าจดจำกว่าซึ่งหมายถึง " change inner word" เพียงขั้นตอนเดียว

สำหรับคำถามที่สองเกี่ยวกับ "แทนการใช้วาง" "_diwPวิธีการแก้ปัญหาของฉันคือ มันdหนึ่งคำinner wอ๊อดไปลงทะเบียนคุณไม่ดูแลและpASTE เนื้อหาลงทะเบียนเริ่มต้นของ ข้อดีคือคุณสามารถวางรีจิสเตอร์เริ่มต้นได้หลายครั้งเพราะจะไม่เป็นมลพิษ มัน litte nnoremap ,r "_diwPที่ซับซ้อนดังนั้นผมว่ามันเป็นแผนที่


2

หรือคุณอาจใช้ลำดับคีย์bdwiเพื่อลบคำปัจจุบันและเข้าสู่โหมด INSERT


1
คุณสามารถใช้bcwเพื่อไปที่จุดเริ่มต้นของคำปัจจุบันจากนั้นเปลี่ยนคำซึ่งจะทำให้คุณแทรกโหมด
Hank Gay

หากเคอร์เซอร์ของคุณอยู่บนอักขระตัวแรกของคำอยู่แล้วนั่นจะเป็นการลบคำก่อนหน้า
Warren Pena

3
@WarrenPena ในกรณีนั้นให้ใช้dwi. ระวังอย่าให้ตำรวจสังเกตเพราะ DWI ผิดกฎหมายในรัฐส่วนใหญ่
Braden Best
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.