Vim hapus baris kosong


Jawaban:


1233
:g/^$/d

:gakan menjalankan perintah pada baris yang cocok dengan regex. Regex adalah 'baris kosong' dan perintahnya adalah :d(hapus)


38
Terima kasih soulmerge. Ini adalah jawaban favorit saya, karena sebenarnya menjelaskan apa yang dilakukan oleh perintah: g.
Tim Swast

4
Ini akan menghapus semua baris kosong (tidak mengandung karakter spasi putih ..), tetapi itu mungkin bukan persyaratan unik. Seseorang mungkin masih menyimpan salah satu baris kosong. :%!cat -smungkin menjadi pilihan ..
coanor

2
: g / ^ \ s * $ / d dengan regex 'any space char yang mungkin' di telepon
oyd11

180

Ditemukan, ini:

g/^\s*$/d

Sumber: Kekuatan g di vim wikia

Penjelasan singkat tentang :g

:[range]g/pattern/cmd

Ini bekerja pada [range] yang ditentukan (default seluruh file), dengan mengeksekusi cmd perintah Ex untuk setiap pola pencocokan baris (perintah Ex adalah yang dimulai dengan titik dua seperti :duntuk menghapus). Sebelum menjalankan cmd , " ." diatur ke baris saat ini.


9
Bagus. Tapi bukan garis kosong.
innaM

13
Ah, ya, ini akan cocok dengan baris yang hanya berisi karakter spasi putih. Saya akan menerima jawaban soulmerge.
almost_lunchtime

16
yang harus cocok dengan baris kosong DAN baris yang hanya terdiri dari spasi putih ... (* cocok dengan nol atau beberapa contoh dari \ s ...)?
monojohnny

14
Saya berpendapat ruang kosong murni BENAR-BENAR merupakan garis kosong, sedangkan tidak ada spasi putih lebih dari garis kosong, bukankah begitu? ;)
Kasapo

4
Oxford mengatakan kosong adalah "ruang yang tersisa untuk diisi dokumen". Menafsirkannya sebanyak mungkin, tetapi inilah yang saya cari. Terima kasih!
Joe Tricarico

53
:v/./d

atau

:g/^$/d

atau

:%!cat -s

7
Trik rapi dengan: v /./d (lebih mudah untuk mengetik) tetapi kemudian Anda perlu melakukan: nohl setelah.
Claes Mogren

1
@ClaesMogren atau hanya terpental pada control-l
jm3

6
@zladuric sesuai dengan vim.wikia.com/wiki/Power_of_g itu reVerse global (jadi ia melakukan perintah pada semua yang tidak cocok)
adam_0

44

Berikut ini dapat digunakan untuk menghapus hanya beberapa baris kosong (kurangi menjadi satu baris kosong) dan biarkan satu baris kosong utuh:

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

3
Bisakah seseorang menjelaskan apa arti token? (Jadi, bagaimana cara kerjanya?) Terima kasih.
PAStheLoD

5
\_$berarti end-of-line yang dapat digunakan di dalam suatu pola ( $hanya dapat digunakan pada akhir pola.) Sama dengan \_^itu berarti awal dari sebuah garis dan dapat digunakan di mana saja di dalam pola. Jadi, polanya cocok dengan garis kosong, baris baru, dan lagi garis kosong. Lihat halaman bantuan regex Vim .
Wiktor Stribiżew

1
Cara lain untuk melakukan hal yang sama::g/^$/,/./-j
SergioAraujo

14
  1. cara menghapus semua baris kosong

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

    (lakukan ini beberapa kali menggunakan semua baris kosong hilang)

  2. cara menghapus semua baris kosong meninggalkan SINGLE baris kosong

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

    (lakukan ini beberapa kali)

  3. cara menghapus semua baris kosong meninggalkan DUA baris kosong PADA MAKSIMUM,

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

    (lakukan ini beberapa kali)

untuk memasukkan ^ M, saya harus mengontrol-Q dan kontrol-M di windows


2
Anda juga dapat menggunakannya \rsebagai pengganti Ctrl-M.
dash-tom-bang

6

Bagaimana tentang:

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

5

bekerja dengan perl di vim:

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


Perl saya mungkin agak berkarat, tetapi tidak chompjuga melakukan pekerjaan?
Mark K Cowan


5

Fungsi ini hanya menghapus dua atau lebih baris kosong, letakkan baris di bawah ini di vimrc Anda, lalu gunakan \ d untuk memanggil fungsi

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

Saya mencoba beberapa jawaban di halaman ini, tetapi banyak dari mereka tidak bekerja untuk saya. Mungkin karena saya menggunakan Vim pada Windows 7 (jangan mengejek, kasihan padaku: p)?

Inilah yang termudah yang saya temukan yang berfungsi pada Vim di Windows 7:

:v/\S/d

Berikut jawaban yang lebih panjang di 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

tempel

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

di .vimrc Anda, lalu mulai ulang vim Anda. jika Anda menggunakan perintah: 5,12DBL itu akan menghapus semua baris kosong antara baris ke-5 dan ke-12. Saya pikir jawaban saya adalah jawaban terbaik!


Saat memposting jawaban, silakan tambahkan dan penjelasan yang menjelaskan apa yang Anda ubah atau tambahkan atau cara kerjanya atau sesuatu. Meskipun jawaban Anda mungkin solusinya, kemungkinan sebagian orang yang membaca ini tidak mengerti apa artinya atau bagaimana cara kerjanya. Dan tolong lakukan dalam bahasa Inggris.
Tim

Itu tidak masalah di sini. Pertanyaan ini menerima jawaban 5 tahun yang lalu
Tim

Saya pikir jawaban soulmerge: g / ^ $ / d bukan jawaban terbaik. Dan saya edit untuk meningkatkan jawabannya dengan: g / ^ \ s * $ / d. tetapi mengapa saya tidak dapat menonton suntingan saya di "tampilkan semua suntingan untuk pose ini"?
cn8341

Jawaban saya lebih baik daripada jawabannya, dan siapa yang menolak jawaban saya dan mengapa jawaban saya ditolak?
cn8341

2

Jika ada sesuatu yang menggandakan garis teks Anda maka perintah ini akan menghapus spasi ganda dan menggabungkan garis kosong berulang yang sudah ada menjadi satu baris kosong. Ini menggunakan pembatas sementara ^^^ pada awal baris jadi jika ini berbenturan dengan konten Anda pilih yang lain. Baris yang hanya berisi spasi putih dianggap kosong.

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

2

Tekan deletetombol dalam mode sisipkan untuk menghapus garis kosong.


1

Ini bekerja untuk saya:

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

Ini pada dasarnya menghapus semua baris yang tidak memiliki angka atau huruf. Karena semua item dalam daftar saya memiliki surat, itu menghapus semua baris kosong.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.