vim에서 단락 내부의 줄을 결합하십시오


13

자동 줄 바꿈을 사용하여 긴 문서를 vim에 입력했다고 가정하면 모든 줄이 79 자에서 끊어졌습니다. 전체 문서에 서식을 적용하여 해당 길이의 모든 줄을 끊을 수도 있습니다.

문서에서 단락은 빈 줄로 구분됩니다.

이제 단락 내에서 줄 바꿈을 원하지 않기로 결정했습니다.

단락 경계를 완전히 없애지 않고 어떻게 단락 내의 모든 줄 바꿈을 제거 할 수 있습니까?

나는이 빠르고 바보 같은 핵을 만들었지 만 적절한 길을 찾고 있습니다.

:%s/^\s*$/@@@@@ - replace blank lines with @@@@@
ggVGgJ           - join all lines in the file
:%s/@@@@@/\r\r/g   - replace @@@@@ with line breaks

솔루션이 작동하고 솔루션이 작동하면 두드리지 마십시오.
pdwalker

답변:


12

파일의 끝에 빈 줄이 있는지 확인한 다음 빈 단락으로 끝나는 모든 단락에 참여하십시오.

G:a

.
:g/^./ .,/^$/-1 join

설명 : 먼저 파일의 끝으로 가서 빈 줄을 추가하십시오 :a(더 우아한 방법이있을 수 있습니다. 대화 형으로 처음 세 줄을으로 바꿀 수 있습니다 o<ESC>). 그런 다음 아직 고려되지 않은 빈 줄이 아닌 모든 줄에 대해 ( :g/^./) join선택한 줄에서 시작 .하여 다음 빈 줄 ( /^$/-1) 전에 한 줄로 끝나는 범위에 명령을 적용하십시오 .

선택적으로 :g/^$/d빈 줄을 유지하지 않으려면 (이륙 할 수 있음 -1).


감사. 이것은 나에게 매우 가까워 지지만 단락 사이의 빈 줄을 삭제합니다. (fileformat unix를 사용해 보았고 Windows인지 확인했습니다.) 또한 명령을 약간 번역 할 수 있습니까? G는 마지막 줄로갑니다. : 도움말에 따르면 "추가"하지만 그게 뭔지 잘 모르겠습니다. 또한 당신이 가지고있는 g / pattern / cmd가 나를 잃어 버렸습니다. 명령이 뭐야?
dggoldst

@dggoldst : 빈 줄을 유지하도록 명령을 변경했습니다. 처음 세 줄은 파일 끝에 빈 줄을 추가하는 것입니다 (그렇지 않으면 마지막 단락이 일치하지 않습니다). 마지막 명령은입니다 :g. 모든 일치하는 줄에 명령을 적용합니다. 참조 :help :g아마도 방법이 스레드 :g동작합니다 당신 삭제 줄 바꿈 .
Gilles 'SO- 악마 그만

:$pu _ 끝에 블랙홀 레지스터를 넣으면 끝에 빈 줄이 생깁니다.
SergioAraujo

12

이것은해야합니다 :

:set tw=99999
gggqG

tw가장 긴 단락의 문자 수만큼 큰 값으로 설정됩니다. gg커서를 첫 번째 줄로 이동합니다. gq재 포맷 명령입니다. G커서를 마지막 행으로 이동하여 gq현재 커서 위치에서 마지막 행으로 다시 포맷하도록 지시합니다.


5
  1. 원하는 단락 안에 커서를 설정하십시오

  2. 유형: vipJ

( vip현재 단락을 강조 표시하고 J모든 줄을 결합합니다)


2

가장 깨끗한 방법은 아니지만 여기에 내가 사용하는 것이 있습니다.

ggqav}bgJ}wq999@a   # go to the top of the file (gg)
                    # start recording macro "a" (qa)
                    # select the entire paragraph (v})
                    # go back one word so as not to join the blank line (b)
                    # join the selected lines without spaces (gJ)
                    # go to first word of the next paragraph (}w)
                    # finish recording the macro (q)
                    # 999 times (arbitrary number of paragraphs to join)
                    # run macro "a" (@a)

( VIM 7.2에서 작동합니다. )

단락이 원래 형식화되었을 때 분할 된 방식에 따라 gJ명령 (공백없이 결합)을 J명령 ( 공백으로 결합) 으로 대체 할 수 있습니다 .

임의 999개수 는 파일의 단락 수 이상이어야 합니다. 프로세서 주기만 원하는 경우 더 큰 숫자를 선택할 수 있습니다. 단락 사이에 빈 줄이 하나만 있다고 가정하면 다음을 사용하여보다 정확한 단락 수를 얻을 수 있습니다.

:%s/^$//gn     # returns "999 matches on 999 lines"

이것은 나를 위해 작동합니다. 커서를 파일 맨 위에 놓으려면 처음에 "gg"를 추가하는 것이 좋습니다. 또한 gJ 대신 J를 사용하면 별도의 단어가 하나로 묶이지 않습니다. 이것은 현재 저를 괴롭히는 "formatoptions"의 값에 대해서만 해당 될 수 있습니다.
dggoldst
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.