Vim hapus baris kosong

674

Perintah apa yang bisa saya jalankan untuk menghapus baris kosong di Vim?

waktu makan siang hampir
sumber

Jawaban:

1233
:g/^$/d

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

soulmerge
sumber
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.

waktu makan siang hampir
sumber
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
mandaleeka
sumber
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
Draemon
sumber
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

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

Bagaimana tentang:

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

sumber
5

bekerja dengan perl di vim:

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

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

Ini bekerja untuk saya

:%s/^\s*$\n//gc

allenhwkim
sumber
Saya menggunakan sesuatu yang serupa::%s/^\n//gc
Clint Pachl
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>
SergioAraujo
sumber
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

Pokey
sumber
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!

cn8341
sumber
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/^^^^.*
Tuan
sumber
2

Tekan deletetombol dalam mode sisipkan untuk menghapus garis kosong.

akp
sumber
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.

pengguna1481441
sumber