Vim에서 텍스트를 일정 길이로 줄 바꿈하려면 어떻게해야합니까?


102

상대적 측정에 대해 이야기 해 봅시다. 내 Vim은 다음과 같습니다.

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc

더 작게하고 싶습니다.

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc

어떻게받을 수 있습니까? 그리고 그러한 블록의 길이 설정을 어떻게 관리 할 수 ​​있습니까?


텍스트를 들여 쓰지 않고 줄 바꿈을 의미합니까?
lc.

lc : 차이점을 모르겠습니다. 나에게 추천 된대로 랩을 쓰려고했지만 제대로 작동하지 않았습니다.
Léo Léopold Hertz 준영

답변:


177

실제로 다음 두 가지를 수행 할 수 있습니다.

  1. 줄 바꿈을 삽입하여 vim 형식 (iechange)으로 텍스트를 더 짧은 줄로 지정
  2. 줄은 그대로 두되 줄 바꿈 표시

당신은 무엇을 원합니까?

옵션 1은 설정에 의해 달성됩니다 textwidth(예 : :set textwidth=30(Swaarop의 답변에서)). 그런 다음 텍스트를 강조 표시하고 (시각적 모드에서)를 입력하여 텍스트 서식을 다시 지정할 수 있습니다 gq. ( textwidth으로 축약 할 수 tw있으므로 :set tw=30.)

옵션 2는 :set wrap/ 를 실행하여 전환 할 수 있습니다 :set nowrap. 창에 비해 너무 긴 줄을 줄 바꿈합니다.

둘 다 독립적입니다.


33
비주얼 모드에서 gq 키 명령에 +1, 그것은 매우 유용합니다
Fire Crow

3
참고로 이것은 공백에서 중단되며 gqgq는 tw = 5 인 경우에도 질문에 표시된 것과 같은 줄에 아무것도하지 않습니다.
dlamblin

2
@Dlamblin : 맞습니다. 공백을 고려하지 않고 주어진 너비로 정확하게 접으려면 foldfgm의 대답과 같이 명령 을 사용하십시오 .
sleske

귀하의 옵션은 내가 보는 한 작동하지 않습니다. wrap에서가 아니라 창 경계에서 래핑됩니다 textwidth.
DerWeh

@DerWeh : 예, 랩은 창 경계에서 랩핑됩니다. 나는 명확히하기 위해 편집했다.
sleske

60

'textwidth'를 설정하면 시각적 모드로 텍스트를 선택하고 gq를 눌러 멋지게 포장 할 수 있습니다 (일부 이전 / 레거시 구성에서도 Q를 사용할 수 있음).

몇 가지 유용한 팁 :

gqq (wrap the current line)
gq} (wrap this 'paragraph', i.e. until the next blank line)
:h gq

3
+1, 나는 vim에서 실수로 gq를 쳤고 지난 30 분 동안 내가 무엇을 쳤는지 보려고 노력했습니다. 이것은 매우 유용합니다.
user176121 2011

gqq또한 현재 줄을 줄 바꿈합니다 ( gqgq또는 대신 gq$).
Ash

21

fold (1) 사용은 한 가지 가능성입니다.

:%!fold -w5 

결과:

aaaaa
aaaaa
aaa 
bbbbb
bbbbb
bbb 
ccccc
ccccc
ccc

1
이것은 또한 접을 공간을 존중하지 않습니다
Lionel

7
@Lionel : 네. 공백을 고려하려면 접기 명령에 "-s"옵션을 추가하십시오.
sleske

14
:set textwidth=30

원본 포스터의 예와 같이 공백이 없을 때 textwidth는 어떻게 처리합니까? 나는 연극을했고 공백이있는 경우 (또는 breakat 변수가 다른 것으로 설정된 경우 가정) 텍스트 너비를 기준으로 형식을 지정하는 것 같습니다.
Andy

3
@Andy textwidth는 공백이없는 상황을 처리하지 않습니다. formatexpr이를 수행 하기 위해 자체 함수를 작성할 수 있습니다 .
Swaroop CH

8

특정 길이로 나누고 싶은 공백이없는 텍스트가있는 경우 외부를 사용 fold하거나 직접 작성할 필요가 없습니다 formatexpr.

:%s/\(.\{80\}\)/\1\r/g

80 자에서 모든 줄을 끊습니다.


2
이것은 OpenSSL 인증서를 부활시키는 동안 나의 하루를 절약했습니다. 주셔서 감사합니다
젠 기스 캔
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.