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


คำตอบ:


1233
:g/^$/d

:gจะรันคำสั่งบนบรรทัดที่ตรงกับ regex regex คือ 'บรรทัดว่าง' และคำสั่งคือ:d(ลบ)


38
ขอบคุณ Soulmerge นี่คือคำตอบที่ฉันโปรดปรานเพราะจริง ๆ แล้วมันอธิบายสิ่งที่คำสั่ง: g ทำ
Tim Swast

4
สิ่งนี้จะลบบรรทัดว่างทั้งหมด (ไม่มีอักขระ white space ใด ๆ .. ) แต่นั่นอาจไม่ใช่ข้อกำหนดเฉพาะ บางคนอาจยังคงเป็นหนึ่งในบรรทัดว่าง :%!cat -sอาจจะเป็นทางเลือกที่ ..
coanor

2
: g / ^ \ s * $ / d ด้วย regex ของ 'any space char ที่เป็นไปได้' ในบรรทัด
oyd11

180

พบมันมัน:

g/^\s*$/d

ที่มา: พลังของgที่ vim wikia

คำอธิบายสั้น ๆ ของ :g

:[range]g/pattern/cmd

สิ่งนี้ทำหน้าที่ใน[ช่วง] ที่ระบุ(ไฟล์ทั้งหมดเริ่มต้น) โดยการดำเนินการคำสั่ง Ex cmdสำหรับแต่ละรูปแบบการจับคู่บรรทัด(คำสั่ง Ex เป็นหนึ่งที่เริ่มต้นด้วยโคลอนเช่น:dการลบ) ก่อนดำเนินการcmd " ." จะถูกตั้งค่าเป็นบรรทัดปัจจุบัน


9
ดี แต่ไม่ใช่ว่าบรรทัดว่างเปล่า
innaM

13
อาใช่สิ่งนี้จะตรงกับบรรทัดที่มีอักขระช่องว่างเท่านั้น ฉันจะยอมรับคำตอบของ Soulmerge
เกือบ _lunchtime

16
ที่ควรตรงกับบรรทัดว่างและบรรทัดที่ประกอบด้วย whitespaces ... (* ตรงกับศูนย์หรือหลายอินสแตนซ์ของ \ s ... )?
monojohnny

14
ฉันจะเถียงช่องว่างที่บริสุทธิ์เป็นบรรทัดว่างในขณะที่ไม่มีช่องว่างเป็นบรรทัดว่างเปล่าจริง ๆ มากกว่าคุณไม่คิดเหรอ? ;)
Kasapo

4
Oxford กล่าวว่าช่องว่างคือ "ช่องว่างที่เหลือสำหรับเอกสาร" ตีความว่าคุณทำได้ แต่นี่คือสิ่งที่ฉันกำลังมองหา ขอบคุณ!
Joe Tricarico

53
:v/./d

หรือ

:g/^$/d

หรือ

:%!cat -s

7
เคล็ดลับเรียบร้อยด้วย: v /./ d (พิมพ์ง่ายกว่า) แต่คุณต้องทำ: nohl หลังจากนั้น
Claes Mogren

1
@ClaesMogren หรือเพียงแค่ตีกลับในการควบคุม -l
jm3

6
@zladuric ตามvim.wikia.com/wiki/Power_of_gมันย้อนกลับระดับโลก (ดังนั้นจึงไม่คำสั่งเกี่ยวกับทุกอย่างที่ไม่ตรง)
adam_0

44

ข้อมูลต่อไปนี้สามารถใช้เพื่อลบบรรทัดว่างหลายบรรทัดเท่านั้น (ลดลงเป็นบรรทัดว่างเดี่ยว) และปล่อยให้บรรทัดว่างเดี่ยวยังคงอยู่:

:g/^\_$\n\_^$/d

3
มีคนอธิบายความหมายของโทเค็นได้ไหม (ดังนั้นมันทำงานอย่างไร) ขอบคุณ
PAStheLoD

5
\_$หมายถึงend-of-lineที่สามารถใช้ภายในรูปแบบ ( $สามารถใช้ได้ที่ส่วนท้ายของรูปแบบเท่านั้น) Same is with \_^นั่นหมายถึงจุดเริ่มต้นของบรรทัดและสามารถใช้ที่ใดก็ได้ภายในรูปแบบ ดังนั้นรูปแบบจึงตรงกับบรรทัดว่างบรรทัดใหม่และบรรทัดว่างอีกครั้ง ดูกลุ่ม regex หน้าความช่วยเหลือ
Wiktor Stribiżew

1
วิธีอื่นในการทำเช่นเดียวกัน::g/^$/,/./-j
SergioAraujo

14
  1. วิธีการลบบรรทัดว่างทั้งหมด

    :%s,\n\n,^M,g
    

    (ทำสิ่งนี้หลาย ๆ ครั้งโดยใช้บรรทัดว่างทั้งหมดก็หายไป)

  2. วิธีการลบบรรทัดว่างทั้งหมดออกจากบรรทัดว่าง SINGLE

    :%s,\n\n\n,^M^M,g
    

    (ทำเช่นนี้หลายครั้ง)

  3. วิธีการลบบรรทัดว่างทั้งหมดออกจากสองบรรทัดว่างที่ MAXIMUM

    :%s,\n\n\n\n,^M^M^M,g
    

    (ทำเช่นนี้หลายครั้ง)

ในการป้อนข้อมูล ^ M ฉันต้องควบคุม -Q และ control-M ใน windows


2
นอกจากนี้คุณยังสามารถใช้ในสถานที่ของ\r Ctrl-M
dash-tom-bang

6

เกี่ยวกับ:

:g/^[ \t]*$/d

5

ทำงานกับ Perl ในกลุ่ม:

:%!perl -pi -e s/^\s*$//g


Perl ของฉันอาจสนิมเล็กน้อย แต่จะไม่chompทำงานเช่นกันหรือ
Mark K Cowan


5

ฟังก์ชั่นนี้เพียงลบบรรทัดว่างสองเส้นขึ้นไปใส่บรรทัดด้านล่างใน vimrc ของคุณจากนั้นใช้ \ d เพื่อเรียกใช้ฟังก์ชัน

fun! DelBlank()
   let _s=@/
   let l = line(".")
   let c = col(".")
   :g/^\n\{2,}/d
   let @/=_s
   call cursor(l, c)
endfun
map <special> <leader>d :keepjumps call DelBlank()<cr>

4

ฉันลองตอบคำถามสองสามข้อในหน้านี้ แต่ส่วนมากไม่ได้ผลสำหรับฉัน อาจเป็นเพราะฉันใช้ Vim บน Windows 7 (อย่าเยาะเย้ยมีเพียงสงสารฉัน: p)?

นี่เป็นวิธีที่ง่ายที่สุดที่ฉันพบว่าทำงานบน Vim ใน Windows 7:

:v/\S/d

ต่อไปนี้เป็นคำตอบเพิ่มเติมสำหรับ Vim Wikia: http://vim.wikia.com/wiki/Remove_unwanted_empty_lines


3
:g/^\s*$/d
^ begin of a line
\s* at least 0 spaces and as many as possible (greedy)
$ end of a line

วาง

:command -range=% DBL :<line1>,<line2>g/^\s*$/d

ใน. vimrc ของคุณจากนั้นเริ่ม vim ของคุณ ถ้าคุณใช้คำสั่ง: 5,12DBL มันจะลบบรรทัดว่างทั้งหมดระหว่างแถวที่ 5 และแถวที่ 12 ฉันคิดว่าคำตอบของฉันคือคำตอบที่ดีที่สุด!


เมื่อโพสต์คำตอบโปรดเพิ่มและคำอธิบายอธิบายสิ่งที่คุณเปลี่ยนแปลงหรือเพิ่มหรือวิธีการทำงานหรือบางสิ่ง แม้ว่าคำตอบของคุณอาจเป็นวิธีแก้ปัญหา แต่ก็มีบางคนที่อ่านบทความนี้ไม่เข้าใจความหมายหรือวิธีการทำงานของมัน และทำมันเป็นภาษาอังกฤษ
ทิม

นั่นไม่สำคัญเลย คำถามนี้ยอมรับคำตอบ 5 ปีที่แล้ว
ทิม

ฉันคิดว่าคำตอบของ Soulmerge: g / ^ $ / d ไม่ใช่คำตอบที่ดีที่สุดและฉันแก้ไขเพื่อปรับปรุงคำตอบของเขาด้วย: g / ^ \ s * $ / d แต่ทำไมฉันไม่สามารถดูการแก้ไขของฉันใน "แสดงการแก้ไขทั้งหมดในโพสต์นี้"
cn8341

คำตอบของฉันดีกว่าคำตอบของเขาและใครปฏิเสธคำตอบของฉันและทำไมคำตอบของฉันถูกปฏิเสธ?
cn8341

2

หากมีบางสิ่งที่มีสองบรรทัดของข้อความของคุณแล้วคำสั่งนี้จะลบระยะห่างสองครั้งและรวมบรรทัดว่างที่ทำซ้ำก่อนที่มีอยู่ในบรรทัดว่างเดียว มันใช้ตัวคั่นชั่วคราวของ ^^^ ที่จุดเริ่มต้นของบรรทัดดังนั้นหากการปะทะนี้กับเนื้อหาของคุณเลือกอย่างอื่น บรรทัดที่มีช่องว่างเท่านั้นถือว่าเป็นช่องว่าง

%s/^\s*\n\n\+/^^^\r/g | g/^\s*$/d | %s/^^^^.*


1

สิ่งนี้ใช้ได้กับฉัน:

:%s/^[^a-zA-Z0-9]$\n//ig

โดยพื้นฐานแล้วมันจะลบทุกบรรทัดที่ไม่มีตัวเลขหรือตัวอักษร เนื่องจากรายการทั้งหมดในรายการของฉันมีตัวอักษรมันจึงลบบรรทัดว่างทั้งหมด

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