vim에서 단락 내부의 줄을 결합하십시오 어떻게 단락 내의 모든 줄 바꿈을 제거

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

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

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

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

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

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


답변

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

G:a

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

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

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


답변

이것은해야합니다 :

:set tw=99999
gggqG

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


답변

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

  2. 유형: vipJ

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


답변

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

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"