ฉันสามารถเรียกใช้คำสั่งใดเพื่อลบบรรทัดว่างในกลุ่ม?
ฉันสามารถเรียกใช้คำสั่งใดเพื่อลบบรรทัดว่างในกลุ่ม?
คำตอบ:
:g/^$/d
:g
จะรันคำสั่งบนบรรทัดที่ตรงกับ regex regex คือ 'บรรทัดว่าง' และคำสั่งคือ:d
(ลบ)
:%!cat -s
อาจจะเป็นทางเลือกที่ ..
พบมันมัน:
g/^\s*$/d
ที่มา: พลังของgที่ vim wikia
คำอธิบายสั้น ๆ ของ
:g
:[range]g/pattern/cmd
สิ่งนี้ทำหน้าที่ใน[ช่วง] ที่ระบุ(ไฟล์ทั้งหมดเริ่มต้น) โดยการดำเนินการคำสั่ง Ex cmdสำหรับแต่ละรูปแบบการจับคู่บรรทัด(คำสั่ง Ex เป็นหนึ่งที่เริ่มต้นด้วยโคลอนเช่น
:d
การลบ) ก่อนดำเนินการcmd ".
" จะถูกตั้งค่าเป็นบรรทัดปัจจุบัน
:v/./d
หรือ
:g/^$/d
หรือ
:%!cat -s
ข้อมูลต่อไปนี้สามารถใช้เพื่อลบบรรทัดว่างหลายบรรทัดเท่านั้น (ลดลงเป็นบรรทัดว่างเดี่ยว) และปล่อยให้บรรทัดว่างเดี่ยวยังคงอยู่:
:g/^\_$\n\_^$/d
\_$
หมายถึงend-of-lineที่สามารถใช้ภายในรูปแบบ ( $
สามารถใช้ได้ที่ส่วนท้ายของรูปแบบเท่านั้น) Same is with \_^
นั่นหมายถึงจุดเริ่มต้นของบรรทัดและสามารถใช้ที่ใดก็ได้ภายในรูปแบบ ดังนั้นรูปแบบจึงตรงกับบรรทัดว่างบรรทัดใหม่และบรรทัดว่างอีกครั้ง ดูกลุ่ม regex หน้าความช่วยเหลือ
:g/^$/,/./-j
วิธีการลบบรรทัดว่างทั้งหมด
:%s,\n\n,^M,g
(ทำสิ่งนี้หลาย ๆ ครั้งโดยใช้บรรทัดว่างทั้งหมดก็หายไป)
วิธีการลบบรรทัดว่างทั้งหมดออกจากบรรทัดว่าง SINGLE
:%s,\n\n\n,^M^M,g
(ทำเช่นนี้หลายครั้ง)
วิธีการลบบรรทัดว่างทั้งหมดออกจากสองบรรทัดว่างที่ MAXIMUM
:%s,\n\n\n\n,^M^M^M,g
(ทำเช่นนี้หลายครั้ง)
ในการป้อนข้อมูล ^ M ฉันต้องควบคุม -Q และ control-M ใน windows
\r
Ctrl-M
เกี่ยวกับ:
:g/^[ \t]*$/d
ทำงานกับ Perl ในกลุ่ม:
:%!perl -pi -e s/^\s*$//g
chomp
ทำงานเช่นกันหรือ
ฟังก์ชั่นนี้เพียงลบบรรทัดว่างสองเส้นขึ้นไปใส่บรรทัดด้านล่างใน 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>
ฉันลองตอบคำถามสองสามข้อในหน้านี้ แต่ส่วนมากไม่ได้ผลสำหรับฉัน อาจเป็นเพราะฉันใช้ Vim บน Windows 7 (อย่าเยาะเย้ยมีเพียงสงสารฉัน: p)?
นี่เป็นวิธีที่ง่ายที่สุดที่ฉันพบว่าทำงานบน Vim ใน Windows 7:
:v/\S/d
ต่อไปนี้เป็นคำตอบเพิ่มเติมสำหรับ Vim Wikia: http://vim.wikia.com/wiki/Remove_unwanted_empty_lines
: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 ฉันคิดว่าคำตอบของฉันคือคำตอบที่ดีที่สุด!
หากมีบางสิ่งที่มีสองบรรทัดของข้อความของคุณแล้วคำสั่งนี้จะลบระยะห่างสองครั้งและรวมบรรทัดว่างที่ทำซ้ำก่อนที่มีอยู่ในบรรทัดว่างเดียว มันใช้ตัวคั่นชั่วคราวของ ^^^ ที่จุดเริ่มต้นของบรรทัดดังนั้นหากการปะทะนี้กับเนื้อหาของคุณเลือกอย่างอื่น บรรทัดที่มีช่องว่างเท่านั้นถือว่าเป็นช่องว่าง
%s/^\s*\n\n\+/^^^\r/g | g/^\s*$/d | %s/^^^^.*
กดdeleteปุ่มในโหมดแทรกเพื่อลบบรรทัดว่าง
สิ่งนี้ใช้ได้กับฉัน:
:%s/^[^a-zA-Z0-9]$\n//ig
โดยพื้นฐานแล้วมันจะลบทุกบรรทัดที่ไม่มีตัวเลขหรือตัวอักษร เนื่องจากรายการทั้งหมดในรายการของฉันมีตัวอักษรมันจึงลบบรรทัดว่างทั้งหมด