vim에서 긴 줄을 끊는 방법? 는 각 블록을

나는 매우 큰 텍스트 파일을 다음과 같은 블록으로 구성했습니다.

Short line.
Really long line.
Short line.

빈 줄로 분리하고 vim (Linux에서)을 사용하여 긴 줄을 나누고 다음과 같은 블록을 얻고 싶습니다.

Short line.
This was
part of
a long line.
Short line.

gq(및 gw)의 문제 는 각 블록을 전체 단락으로 리플 로우한다는 것입니다. 즉, 각 블록 내에서 두 줄 바꿈을 유지하지 않으며 형식 옵션 :help fo-table중 어느 것도 gq내가 원하는 것을 할 수 없게합니다. 또한 줄 바꿈 문자를 단락 구분 기호로 정의 할 수 있다면 목표를 달성 할 수 있다고 생각했지만 :help paragraph그 문자에 따라 하드 코딩되었습니다.

편집 : 각 긴 줄을 하나씩 사용 gq하거나 gw형식을 지정할 수 있다는 것을 알고 있지만 파일이 수천 줄 이상 실행되므로 자동으로 달성하는 방법을 찾고 있습니다.



답변

:%norm! gww

이것은 커스터마이즈 된 매핑을 고려하지 않고 (예를 들어, 다른 것에 매핑 된 경우 문제를 피하기 위해) 전체 버퍼에 normal명령을 적용합니다 gww(와 같이 현재 행을 형식화합니다 ).gwgw

보다

  • :help :%
  • :help :norm
  • :help gww

이 대안은 의견에 대한 Ben의 제안에 따르며 정규 솔루션 일치 기능으로 인해 다른 유사한 상황에 더 잘 맞을 수 있기 때문에 원래 솔루션보다 더 간단합니다. “모든 라인 일치”의 경우에는 불필요하게 무차별 적입니다.


gww프로그래밍 방식으로 버퍼의 모든 개별 라인에 적용 :

:g/^/norm gww

참조 :help :g:help norm. ^줄의 시작과 일치하며 실제로는 모든 줄 과 일치 합니다 .

예를 들어 60자를 초과하는 줄만 선택할 수도 있습니다.

:g/\%>60v/norm gww

(참조 :help \%<) 그러나 실제로 gwwtextwidth어쨌든 보다 긴 행만 다시 포맷 하므로 속도 나 결과에 큰 영향을 미치지 않을 수 있습니다.

(내가 사용하고 v대신 “가상 열”에 대한 c후자는 정말 라인에 바이트의 특정 수를 계산하기 때문에, “열”에 대한. 경계해야하는 이유가되며, 대개 멀티 바이트 인코딩을 사용하는 경우이 예기치 않은 결과가 발생할 수 있습니다. 실제로는 위와 같은 이유로 실제 gww줄이 아닙니다 textwidth. 어쨌든 짧은 줄을 다시 포맷하지는 않습니다 .)


답변

gqand gw명령에 대한 매뉴얼을 이미 읽었 으므로 수동으로 긴 행으로 이동 한 다음 gw0, gw$또는 다른 gw명령을 사용하여 현재 행의 형식을 지정하는 것보다 더 편리한 것을 원할 것 입니다.

Vim에서 텍스트 블록 위로 긴 줄을 나누는 쉬운 방법을 모르겠습니다. 그러나 GNU / Linux 시스템에서 Vim을 사용한다고 언급 했으므로 GNU fmt명령을 통해 텍스트를 필터링하는 것이 좋습니다 .

전체 파일의 경우 :

:%!fmt --width=75 --split-only

현재 단락의 경우 (짧은 옵션 사용) :

:'{,'}!fmt -75 -s

관련 fmt옵션 에 대한 설명은 다음과 같습니다.

  • -w, --width=WIDTH– 최대 행 너비 (기본값은 75 열). 이 옵션 -WIDTH은 약식입니다 --width=DIGITS(이 약식 버전을 사용하는 경우 첫 번째 옵션이어야 함).

  • -s, --split-only– 긴 줄을 나누지 만 다시 채우지 마십시오. 기존 하드 줄 바꿈을 유지하는 옵션입니다.


답변

에서:

Short line.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Short line.

마커를 “lorem ipsum”라인에 놓고 gww수율을 누르십시오 ( textwidth=40명확성 을 위해).

Short line.
Lorem ipsum dolor sit amet, consectetur
adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
Short line.

나에게 당신이 요구하는 것 같습니다. 그렇지 않은 경우 명확하게 설명하십시오.


답변