ลบพื้นที่ว่างสำหรับชุดของบรรทัดในโปรแกรมแก้ไข Vim


12

ฉันมีข้อความเหมือนดังต่อไปนี้ในไฟล์:

  sample text
    some random text
            even more random text
text with no indent
 worst indention

ฉันต้องการลบพื้นที่ว่างก่อนแต่ละบรรทัด สำหรับหนึ่งบรรทัดสิ่งที่ฉันทำคือ 0dw

ฉันสามารถทำซ้ำคำสั่งเดียวกันโดยใช้ แต่ด้วยการนำทางไปยังบรรทัดถัดไปด้วยตนเอง

แต่มีวิธีใช้ '0dw' กับบล็อกบรรทัดเหล่านั้นหรือไม่

ฉันคิดว่ามีวิธีใช้แมโคร แต่ฉันไม่ได้ใช้มาก่อน แต่ฉันยินดีที่จะเรียนรู้พวกเขาหากไม่มีทางเลือกอื่น


+1 คำถามที่ดีฉันลงเอยด้วยการทำสิ่งเดียวกัน และยินดีต้อนรับสู่เว็บไซต์
Sardathrion - ต่อต้านการละเมิด SE

คำตอบ:


10
:%s/^\s\+
" Same thing (:le = :left = left-align given range):
:%le

เรียนรู้เพิ่มเติมที่นี่ที่ http://vim.wikia.com/wiki/Remove_unwanted_spaces

หากคุณต้องการทำสิ่งนี้ในช่วงของช่วงใดช่วงหนึ่ง:

:19,25s/^\s\+//

BTW วิธีที่ดีที่สุดในการเริ่มต้นเรียนรู้ vim คือการเรียกใช้งานvimtutorคำสั่งมันจะสอนวิธีใช้ Vim ในโปรแกรมแก้ไข Vim


1
: le ก็น่ากลัวและขอบคุณมากสำหรับทางเลือกและการเชื่อมโยง :)
saiy2k

3
+1 สำหรับ vimtutor พูดถึงรวมถึงคำตอบที่ดี
Sardathrion - ต่อต้านการละเมิด SE

1
เลือกบรรทัดที่เกี่ยวข้องโดยใช้Vและเลื่อนเคอร์เซอร์ไปรอบ ๆ เพื่อขยายการเลือกบรรทัด จากนั้นกด:เพื่อป้อนโดยอัตโนมัติ'<,'>และคุณสามารถใช้ regexp ของ Nikhil ได้
UncleZeiv

1
อีกวิธีหนึ่งในการทำช่วงของเส้น (เนื่องจากฉันลืมหมายเลขบรรทัดเสมอ) คือการทำเครื่องหมาย 2 บรรทัดและใช้งานบนเครื่องหมาย ตัวอย่างเช่นไปสาย 19 และกด 'แม่' ไปกับสาย 25 และกด 'MB' :'a,'bs/^\s\+//แล้วทำ
Patrick

7

อีกวิธีหนึ่งในการทำเช่นนี้คือการใช้เครื่องมือการเยื้องของ VIM (ปกติผูกติดกับ</ >) ก่อนอื่นคุณต้องมีวิธีในการระบุว่าสายใดจะได้รับผลกระทบ คุณสามารถใช้โหมดการเลือกภาพหรือวิธีการอื่นในการระบุช่วงของบรรทัดที่จะได้รับผลกระทบจากนั้นใช้จำนวนสูงหรือระดับการเยื้องในแบบที่ต้องการเพื่อลบ 9<มักจะใช้เคล็ดลับอย่างดีเพื่อลบเยื้องอย่างน้อย 9 ระดับ (แท็บ / ช่องว่าง) ที่เป็นไปได้จากบรรทัดปัจจุบัน


3

ฉันมีวิธีการทำเช่นนี้ในขั้นตอนง่าย ๆ ต่อไปนี้:

1. press `v` to go to visual selection mode
2. select the lines you want to affect
3. :'<,'>normal 0dw

คำอธิบายของขั้นตอนที่สาม:

0 นำทางไปยังจุดเริ่มต้นของบรรทัด

dw ลบคำ (ช่องว่าง)

normal0dwใช้คำสั่ง

'<,'> ทำซ้ำตามปกติสำหรับทุกบรรทัดที่เลือกในโหมดภาพ


1

ctrl+vช่วยให้คุณทำสิ่งที่คล้ายกับสิ่งที่คุณต้องการ แต่ไม่ตรงทั้งหมด คุณสามารถเลือกบล็อกภาพและใช้หนึ่งคำสั่งกับล็อต


2
ฉันเลือกบรรทัดเหล่านั้นในโหมดบล็อกและคำสั่งนี้ใช้งานได้:: '<,'> ปกติ 0dw
saiy2k

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