Vim xóa các dòng trống


674

Tôi có thể chạy lệnh nào để xóa các dòng trống trong Vim?

Câu trả lời:


1232
:g/^$/d

:gsẽ thực thi một lệnh trên các dòng khớp với biểu thức chính quy. Regex là 'dòng trống' và lệnh là :d(xóa)


38
Cảm ơn linh hồn. Đây là câu trả lời yêu thích của tôi, vì nó thực sự giải thích những gì: lệnh g làm.
Tim Swast

4
Điều này sẽ xóa tất cả các dòng trống (không chứa bất kỳ ký tự khoảng trắng nào ..), nhưng đó có thể không phải là yêu cầu duy nhất. Ai đó vẫn có thể giữ một trong những dòng trống. :%!cat -scó thể là sự lựa chọn ..
coanor

2
: g / ^ \ s * $ / d với biểu thức 'bất kỳ không gian char nào có thể' trong dòng
oyd11

180

Tìm thấy nó, đó là:

g/^\s*$/d

Nguồn: Sức mạnh của g tại vim wikia

Giải thích ngắn gọn về :g

:[range]g/pattern/cmd

Điều này hoạt động trên [phạm vi] được chỉ định (toàn bộ tệp mặc định), bằng cách thực hiện lệnh Ex cmd cho mỗi mẫu khớp dòng (lệnh Ex là một bắt đầu bằng dấu hai chấm như :dđể xóa). Trước khi thực hiện cmd , " ." được đặt thành dòng hiện tại.


9
Đẹp. Nhưng không chính xác một dòng trống.
innaM

13
À, vâng, điều này sẽ khớp với các dòng chỉ chứa các ký tự khoảng trắng. Tôi sẽ chấp nhận câu trả lời của soulmerge.
gần_lunchtime

16
phải khớp với các dòng trống VÀ các dòng chỉ gồm các khoảng trắng ... (* khớp với 0 hoặc nhiều phiên bản của \ s ...)?
monojohnny

14
Tôi sẽ tranh luận khoảng trắng tinh khiết CHÍNH XÁC là một dòng trống, trong khi không có khoảng trắng nào thực sự là một dòng trống, bạn có nghĩ thế không? ;)
Kasapo

4
Oxford nói một khoảng trống là "một khoảng trống còn lại để điền vào tài liệu". Giải thích điều đó như bạn có thể, nhưng đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn!
Joe Tricarico

53
:v/./d

hoặc là

:g/^$/d

hoặc là

:%!cat -s

7
Thủ thuật gọn gàng với: v /./ d (dễ gõ hơn) nhưng sau đó bạn cần thực hiện a: nohl sau.
Claes Mogren

1
@ClaesMogren hoặc chỉ bật lên trên control-l
jm3

6
@zladuric theo vim.wikia.com/wiki/Power_of_g đó là xác minh lại toàn cầu (vì vậy, nó thực hiện lệnh trên tất cả mọi thứ không khớp)
adam_0

44

Những điều sau đây có thể được sử dụng để chỉ xóa nhiều dòng trống (giảm chúng thành một dòng trống duy nhất) và giữ nguyên các dòng trống duy nhất:

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

3
Ai đó có thể giải thích ý nghĩa của các mã thông báo? (Vì vậy, làm thế nào nó hoạt động?) Cảm ơn.
PAStheLoD

5
\_$có nghĩa là điểm cuối của dòng có thể được sử dụng bên trong một mẫu ( $chỉ có thể được sử dụng ở cuối mẫu.) Tương tự như \_^vậy có nghĩa là bắt đầu của một dòng và có thể được sử dụng ở bất cứ đâu trong mẫu. Vì vậy, mẫu phù hợp với một dòng trống, một dòng mới và một lần nữa một dòng trống. Xem trang trợ giúp regim Vim .
Wiktor Stribiżew 30/03/2016

1
Một cách khác để làm điều tương tự::g/^$/,/./-j
SergioAraujo

14
  1. làm thế nào để loại bỏ tất cả các dòng trống

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

    (làm điều này nhiều lần sử dụng tất cả các dòng trống đã biến mất)

  2. Làm thế nào để loại bỏ tất cả các dòng trống để lại dòng trống SINGLE

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

    (làm điều này nhiều lần)

  3. làm thế nào để loại bỏ tất cả các dòng trống để lại HAI dòng trống AT MAXIMUM,

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

    (làm điều này nhiều lần)

để nhập ^ M, tôi phải điều khiển-Q và control-M trong windows


2
Bạn cũng có thể sử dụng \rthay thế Ctrl-M.
dash-tom-bang

6

Làm thế nào về:

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

5

làm việc với perl trong vim:

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


Perl của tôi có thể là một chút rỉ sét, nhưng cũng sẽ không chomplàm công việc?
Mark K Cowan


5

Hàm này chỉ xóa hai hoặc nhiều dòng trống, đặt các dòng bên dưới vào vimrc của bạn, sau đó sử dụng \ d để gọi hàm

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

Tôi đã thử một vài câu trả lời trên trang này, nhưng rất nhiều trong số chúng không hiệu quả với tôi. Có lẽ bởi vì tôi đang sử dụng Vim trên Windows 7 (đừng chế giễu, hãy thương hại tôi: p)?

Đây là cách dễ nhất mà tôi thấy hoạt động trên Vim trong Windows 7:

:v/\S/d

Đây là câu trả lời dài hơn trên Vim Wikia: http://vim.wikia.com/wiki/Remove_unwocate_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

dán

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

trong .vimrc của bạn, sau đó khởi động lại vim của bạn. nếu bạn sử dụng lệnh: 5,12DBL, nó sẽ xóa tất cả các dòng trống giữa hàng thứ 5 và hàng thứ 12. Tôi nghĩ rằng câu trả lời của tôi là câu trả lời tốt nhất!


Khi đăng câu trả lời, vui lòng thêm và giải thích mô tả những gì bạn đã thay đổi hoặc thêm hoặc cách thức hoạt động hoặc một cái gì đó. Mặc dù câu trả lời của bạn có thể là giải pháp, có khả năng một số người đọc nó không hiểu ý nghĩa của nó hoặc cách thức hoạt động của nó. Và hãy làm nó bằng tiếng Anh.
Tim

Điều đó không thực sự quan trọng ở đây. Câu hỏi này đã chấp nhận một câu trả lời 5 năm trước
Tim

Tôi nghĩ câu trả lời của soulmerge: g / ^ $ / d không phải là câu trả lời hay nhất. Và tôi chỉnh sửa để cải thiện câu trả lời của anh ấy với: g / ^ \ s * $ / d. nhưng tại sao tôi không thể xem bản chỉnh sửa của mình trong "hiển thị tất cả các chỉnh sửa cho tư thế này"?
cn8341

Câu trả lời của tôi tốt hơn câu trả lời của anh ấy, và ai đã từ chối câu trả lời của tôi và tại sao câu trả lời của tôi bị từ chối?
cn8341

2

Nếu một cái gì đó đã gấp đôi dòng văn bản của bạn thì lệnh này sẽ loại bỏ khoảng cách gấp đôi và hợp nhất các dòng trống lặp lại có sẵn thành một dòng trống duy nhất. Nó sử dụng một dấu phân cách tạm thời của ^^ ^ khi bắt đầu một dòng vì vậy nếu điều này đụng độ với nội dung của bạn, hãy chọn một cái gì đó khác. Các dòng chỉ chứa khoảng trắng được coi là trống.

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

2

Nhấn deletephím trong chế độ chèn để xóa các dòng trống.


1

Điều này làm việc cho tôi:

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

Về cơ bản, nó xóa tất cả các dòng không có số hoặc chữ cái. Vì tất cả các mục trong danh sách của tôi đều có chữ cái, nó đã xóa tất cả các dòng trống.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.