빈 줄 삭제


674

Vim에서 빈 줄을 제거하기 위해 어떤 명령을 실행할 수 있습니까?

답변:


1233
:g/^$/d

:g정규식과 일치하는 행에서 명령을 실행합니다. 정규식은 '빈 줄'이고 명령은 :d(삭제)입니다.


38
고맙습니다 soulmerge. 이것은 : g 명령이 실제로하는 일을 설명하기 때문에 내가 가장 좋아하는 대답입니다.
Tim Swast

4
이렇게하면 빈 줄이 모두 삭제되고 (공백 문자는 포함되지 않습니다.) 고유 한 요구 사항은 아닙니다. 누군가가 여전히 빈 줄 중 하나를 유지할 수 있습니다. :%!cat -s선택이 될 수도 있습니다.
coanor

2
: g / ^ \ s * $ / d 줄에 '가능한 공간 문자'가 포함 된 정규 표현식
oyd11

180

그것을 찾았습니다 :

g/^\s*$/d

출처 : vim wikia에서 g의

간단한 설명 :g

:[range]g/pattern/cmd

이것은 각 행 일치 패턴 에 대해 Ex 명령 cmd 를 실행 하여 지정된 [범위] (기본 전체 파일)에서 작동합니다 (Ex 명령은 삭제 와 같이 콜론으로 시작하는 명령입니다 ). cmd를 실행하기 전에 " "가 현재 줄로 설정되어 있습니다.:d.


9
좋은. 그러나 정확히 빈 줄은 아닙니다.
innaM 2009

13
예, 공백 문자 만 포함하는 행과 일치합니다. soulmerge의 답변을 수락하겠습니다.
almost_lunchtime 2009

16
빈 줄과 공백으로 만 구성된 줄과 일치해야합니다 ... (*는 0 또는 여러 개의 \ s 인스턴스와 일치합니다 ...)?
monojohnny

14
나는 순수한 공백이 정확히 빈 줄이라고 주장하지만 공백은 실제로 빈 줄에 가깝지 않다고 생각하지 않습니까? ;)
Kasapo

4
옥스포드는 블랭크는 "문서에 채워질 공간"이라고 말합니다. 당신이 할 수 있듯이 그것을 해석하십시오, 그러나 이것은 내가 찾던 것입니다. 감사!
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
\_$패턴 내에서 사용할 수있는 라인끝을 의미합니다 (패턴 $의 끝에서만 사용할 수 있습니다). 이는 라인의 시작\_^ 을 의미 하며 패턴 내부의 어느 곳에서나 사용할 수 있습니다. 따라서 패턴은 빈 줄, 줄 바꿈 및 다시 빈 줄과 일치합니다. 참조 빔은 도움말 페이지를 정규식 .
Wiktor Stribiżew

1
동일한 작업을 수행하는 다른 방법 ::g/^$/,/./-j
SergioAraujo

14
  1. 모든 공백 줄을 제거하는 방법

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

    (이 빈번한 행을 모두 사용 하여이 작업을 여러 번 수행하십시오)

  2. 빈 줄을 남겨두고 모든 공백 줄을 제거하는 방법

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

    (여러 번 수행)

  3. 최대 공백에서 두 개의 빈 줄을 남기고 모든 빈 줄을 제거하는 방법,

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

    (여러 번 수행)

^ M을 입력하려면 Windows에서 control-Q와 control-M을 입력해야합니다


2
\r대신에 사용할 수도 있습니다 Ctrl-M.
dash-tom-bang

6

어때요?

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

5

vim에서 perl로 작업하십시오.

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


내 펄은 약간 녹슬지 만 일을하지 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

이 페이지에서 몇 가지 답변을 시도했지만 많은 답변을 얻지 못했습니다. 어쩌면 Windows 7에서 Vim을 사용하고 있기 때문에 (모의하지 말고 동정하십시오 : p)?

Windows 7의 Vim에서 작동하는 가장 쉬운 방법은 다음과 같습니다.

: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 번째 행 사이의 모든 빈 줄이 삭제됩니다. 내 답변이 가장 좋은 답변이라고 생각합니다!


답변을 게시 할 때 변경 또는 추가 한 내용이나 작동 방식 등을 설명하고 추가하십시오. 귀하의 답변이 해결책이 될 수도 있지만, 이것을 읽는 일부 사람들은 그것이 의미하는 바 또는 작동 방식을 이해하지 못할 수 있습니다. 그리고 영어로 해주세요.
Tim

그것은 여기서 중요하지 않습니다. 이 질문은 5 년 전 답변을 수락했습니다.
Tim

soulmerge의 답변 : g / ^ $ / d는 최고의 답변이 아니라고 생각합니다. : g / ^ \ s * $ / d로 그의 답변을 향상시키기 위해 편집합니다. "왜이 포즈에 대한 모든 편집 내용 표시"에서 편집 내용을 볼 수없는 이유는 무엇입니까?
cn8341

내 답변이 그의 답변보다 낫고 누가 내 답변을 거부했으며 왜 내 답변이 거부 되었습니까?
cn8341

2

텍스트에 이중 줄 간격이있는 경우이 명령은 이중 간격을 제거하고 기존의 반복되는 빈 줄을 단일 빈 줄로 병합합니다. 줄의 시작 부분에 ^^^의 임시 구분 기호를 사용하므로 콘텐츠와 충돌하는 경우 다른 것을 선택하십시오. 공백 만 포함 된 줄은 공백으로 처리됩니다.

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

2

delete빈 줄을 제거하려면 삽입 모드에서 키를 누르십시오 .


1

이것은 나를 위해 일했다 :

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

기본적으로 숫자 나 문자가없는 모든 줄을 삭제합니다. 내 목록의 모든 항목에 문자가 있었으므로 빈 줄이 모두 삭제되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.