ฉันสามารถลบทั้งบรรทัดยกเว้นตัวแบ่งบรรทัดได้หรือไม่


33

การดำเนินการที่ค่อนข้างธรรมดาสำหรับฉันในกลุ่มเนื่องจากฉันบังคับและครอบงำและชอบที่จะทำให้ไฟล์ของฉันปลอดจากช่องว่างคือการลบเนื้อหาของทั้งบรรทัด แต่ไม่ใช่ตัวบรรทัดเอง (เช่นไม่ใช่ตัวแบ่งบรรทัด)

มีวิธีที่เป็นกลุ่มในการทำเช่นนี้? บางทีการd<movement command>ดำเนินการ?

เพื่อให้ห่างไกลที่ดีที่สุดที่ฉันได้เป็น 0d$(ในบรรทัดในคำถาม) มีวิธีที่เร็วกว่านี้ไหม


2
คุณสามารถใช้ปลั๊กอินเช่นvim-better-whitespaceซึ่งเป็นไฮไลต์ที่ต่อท้ายช่องว่างให้เลือกคำสั่งเพื่อลบมันออกทั้งหมดในคราวเดียวและสามารถทำได้โดยอัตโนมัติในการบันทึก
deltab


3
แม้ไม่มีปลั๊กอินคุณสามารถลบช่องว่างต่อท้ายโดยใช้การค้นหาและแทนที่เช่น:%s/\s*$//
Kyle Strand

คำตอบ:


34

คุณสามารถใช้ตัวเลือก0Dนี้เพื่อไปที่อักขระตัวแรกในบรรทัดและลบจนกว่าจะสิ้นสุดบรรทัด โปรดทราบว่าคุณสามารถใช้^Dหากคุณต้องการเว้นช่องว่างก่อนหน้านี้เพียงอย่างเดียว .นอกจากนี้การดำเนินการเหล่านี้ไม่สามารถทำซ้ำได้โดยใช้ หากคุณต้องการการผ่าตัดที่สามารถทำซ้ำได้ด้วย.คำสั่งให้ดูคำตอบของ David Lord

หัวข้อช่วยเหลือ:

  • :help 0
  • :help D
  • :help ^

4
ในขณะนี้ตรงไปยังจุดและ (อาจ) การกดแป้นที่น้อยที่สุดก็ไม่สามารถทำซ้ำได้โดยใช้.คำสั่ง สำหรับเหตุผลที่ผมคิดว่าcc<Esc>หรือS<Esc>เป็นที่น่าสนใจมากขึ้นถ้าคุณดูแลเกี่ยวกับการทำซ้ำ
tommcdo

นั่นเป็นความจริง. อย่างไรก็ตามคุณสามารถบันทึกเป็นแมโครและใช้ซ้ำ.ได้
EvergreenTree

โดยทั่วไปแล้วแมโครจะไม่สามารถทำซ้ำ.ได้ มันทำงานเหมือนกับว่าการกดแป้นเหล่านั้นถูกป้อนเข้าแบบโต้ตอบดังนั้นแต่ละคำสั่งจะถูกแยกออก การใช้.จะทำซ้ำคำสั่งสุดท้ายในแมโคร
tommcdo

ฉันทดสอบแล้วและนั่นไม่ใช่วิธีการทำงานสำหรับฉัน หากบันทึกแมโครแล้วใช้มันโดยใช้@{reg}คุณสามารถทำซ้ำได้ใน.ภายหลัง
EvergreenTree

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

20

cc <Esc>จะทำตามที่คุณขอ 0Dแต่การกดแป้นพิมพ์มากกว่า หากคุณต้องการใส่อะไรลงไปในบรรทัดนั้นในภายหลังccอาจจะดีที่สุด


2
หากคุณรวม Shift ไว้เหมือนเดิมและอาจจะง่ายกว่า
Holloway

4
แม้ว่านี่จะไม่ใช่วิธีที่ "สะอาดที่สุด" แต่ก็มีข้อดีอย่างหนึ่งคือมันเป็นเพียงการกระทำเดียวดังนั้นจึงสามารถทำซ้ำได้ด้วย.คำสั่ง ในทางตรงกันข้าม0D(ตามที่แนะนำในคำตอบที่เลือก) เป็นสองการกระทำ: การ0เคลื่อนไหวและDคำสั่ง
tommcdo

@Typeot มันอาจจะง่ายกว่า0Dสำหรับฉันตั้งแต่ฉันได้jkทำแผนที่<Esc>ใน vimrc ของฉันดังนั้นมือของฉันจะไม่ต้องออกจากแถวบ้าน
EvergreenTree

1
ดู @Nobilis คำตอบ: Sมีการบันทึกไว้ว่า "คำพ้องความหมายสำหรับcc"
Volker Siegel

14

Sแล้วCtrl+CหรือEscดูเหมือนว่าจะบรรลุฟังก์ชั่นเดียวกันแน่นอน

จากนั้นจะสามารถทำซ้ำได้ด้วย.เนื่องจากมันเป็นการกระทำเดียว


2
ฉันแค่คิดว่าจะเพิ่มคำตอบนี้แล้วก็เห็นคุณ
เบลล์

7

0Dอาจเป็นสิ่งที่คุณต้องการ มันจะลบจากเคอร์เซอร์ไปที่จุดสิ้นสุดของบรรทัดในขณะที่ออกจากบรรทัด (และตัวอักษรใด ๆ ก่อนเคอร์เซอร์) ในสถานที่


แม้ว่าคำตอบนี้จะเป็น almos อายุหนึ่งปีมันก็คุ้มค่าที่0Dจะต้องลบตั้งแต่ต้นบรรทัดไม่ใช่จากตำแหน่งเคอร์เซอร์
FliiFe

4

ddOฉันมักจะใช้ ddเพื่อลบบรรทัดปัจจุบันและO(ซึ่งเป็นตัวพิมพ์ใหญ่ o) เพื่อเพิ่มบรรทัดใหม่

และนี่ก็เป็น 3 การกดแป้นพิมพ์ แต่ddนับเป็นเพียง 1 และครึ่งหนึ่งและฉันพบง่ายต่อการพิมพ์กว่าO$

มันแตกต่างจาก0Dวิธีแก้ปัญหาเมื่อทำการเยื้องอัตโนมัติเช่นด้วยรหัสนี้ (ที่!···แท็บและเคอร์เซอร์█:

def asd():
!···if foo:
!···!···foo()█
!···!···foobar()

0D จะทิ้งคุณด้วย:

def asd():
!···if foo:
█
!···!···foobar()

และddOจะทิ้งคุณไว้กับ:

def asd():
!···if foo:
!···!···█
!···!···foobar()

และถ้าคุณกดทันทีหลังจากนี้กลุ่มควรเอาอัตโนมัติเยื้องเพื่อให้คุณมีเช่นเดียวกับกับ<Esc>0D

ไม่มีวิธี 'ถูกต้อง' มันจะขึ้นอยู่กับสิ่งที่คุณต้องการจะทำ ฉันชอบddOเพราะมีความยืดหยุ่นมากกว่าและเพราะ "อยู่ในมือของฉัน" :-)


2
^Dจะออกจากช่องว่างเพียงอย่างเดียว
EvergreenTree

เนื่องจากOปล่อยให้คุณอยู่ในโหมดแทรกสิ่งนี้จะเทียบเท่ากับccยกเว้นโดยไม่มีการเยื้องอัตโนมัติ .... ยกเว้นว่าบรรทัดของคุณมีการเยื้องอัตโนมัติ
Kyle Strand

สิ่งนี้จะทำงานแตกต่างกันในบรรทัดสุดท้ายของไฟล์
tommcdo

0

และเพื่อบันทึกการกดคีย์อันมีค่าอันเดียวคุณสามารถใช้0Cซึ่งจะลบอักขระทั้งหมดในบรรทัดปัจจุบันและนำคุณเข้าสู่โหมดแทรก

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