2010-06-13 4 views
186

set textwidth (예 : Vim 80 column layout concerns)을 사용하여 vim에서 텍스트의 너비를 자동으로 설정하는 방법이 있다는 것을 알고 있습니다. 내가 찾는 것은 = (들여 쓰기 라인 명령)과 비슷하지만 80으로 감싸는 것이다. 유스 케이스는 때때로 textwidth로 텍스트를 편집하고 라인을 결합하거나 텍스트를 삭제/추가 한 후에 잘못 포장된다.vim 명령을 사용하여 텍스트를 80 열로 바꾸기

이상적으로,이 명령은 내가 선택한 행을 완전히 재구성하고 짧은 행에 추가하는 동안 긴 행을 잘라냅니다. 예는 :

long line is long! 
short 

명령을 실행 한 후 (가정 랩 13 COLS이었다)이 진정한 VIM 명령 불가능한 경우

long line is 
long! short 

아마도 명령 줄 프로그램이있다 이게 제가 입력을 파이프 할 수있게합니까? 홈 또는 gg-Ctrl 키 수행 할 수 있습니다 http://www.cs.swarthmore.edu/help/vim/reformatting.html

+6

Vim이 텍스트 형식을 [par] (http://www.nicemice.net/par/)와 같은 외부 프로그램에 위임 할 수 있다는 사실을 알고 싶을 수도 있습니다. 나는 [par로 텍스트 포맷하기] (http://vimcasts.org/e/18)를 보여주는 스크린 캐스트를 만들었다. – nelstrom

+0

@nelstrom, 감사합니다. 환상적이야! –

+1

텍스트를 슬림하고 트림 (잘 자르다?)으로 보이게하려면 항상'gq' - [Gentleman 's Quarterly] (http://www.gq.com/)를 생각해보십시오. (의인화 된 남성에 대한 사과, 니모닉은 작동한다.) – ruffin

답변

297

설정 textwidth 80 (:set textwidth=80)에, (파일의 시작 부분으로 이동 :

검색 한 후 좀 더 많은 옵션을 가지고이 참조를 발견)을 입력하고 gqG을 입력하십시오.

gqG은 현재 위치에서부터 파일의 끝까지 텍스트의 서식을 지정합니다. 가능한 경우 자동으로 연속 된 행을 연결합니다. 두 행을 함께 결합하지 않으려면 두 행 사이에 빈 줄을 배치 할 수 있습니다.

+44

FYI :'gqq'는 현재 줄을 포맷한다. –

+7

그리고 시각적 선택도 가능합니다. 즉,'V} gq'와 같은 것입니다. 이렇게하면 실제로 서식을 지정하기 전에 서식을 지정할 수 있습니다. – Plouff

+3

그건 그렇고, 정확히'q'는 그 자체로 무엇입니까? – RichouHunter

77

마이클의 해결책이 핵심이지만, 나는 대부분 현재 단락의 나머지 부분을 다시 포맷하고 싶습니다. 이 동작은 gq}을 사용하십시오.

+13

확장 - gq 을 사용하여 원하는 형식으로 지정할 수 있습니다. –

+0

또한 'nojoinspaces'옵션은 선이 문장 경계에서 결합 될 때 두 공백이 나타나지 않도록합니다. 활판 인쇄 스타일이 영어 문장 사이의 단일 공백 ​​인 경우에 유용합니다. –

30

이동 연산자와 함께 gq을 사용할 수 있습니다. 예를 들어, 현재 줄의 끝으로 다시 포맷하려면 (예 : 커서가있는 줄을 감싸기) gq$

또한 텍스트를 시각적 모드로 선택하여 다시 포맷 할 수도 있습니다 (`v 그리고 이동) 그리고 나서 gq를 타이핑한다.

줄을 줄 바꿈하는 다른 옵션도 있습니다. 당신이 대신 텍스트를 재구성하기 위해 마지막까지 기다릴 필요 그들에 텍스트를 삽입하는 동안 당신의 라인을 포장 정력을 원하는 경우에

, 유용한 이러한 옵션을 찾을 수 있습니다 :

:set textwidth=80 
:set wrapmargin=2 

(돈 ' t는 화면에 표시되는 텍스트를 포맷하고, 당신이 비 빔 방법을 찾고 있다면 버퍼의 텍스트)

+5

'wrapmargin' 도움말 :'textwidth '가 0이 아닌 경우이 옵션은 사용되지 않습니다. – mmoya

10

을 변경하지 않는, 측면 추적 wraplinebreak에 의해 얻을 항상있다 UNIX 명령 fmtpar.

참고 : 나는 유니 코드에 대해 언급 할 수

  • , 그것은 또는 다르게 작동되지 않을 수 있습니다.
  • @nelstrom은 자신의 웹 캐스트에서 par을 사용하여 이미 언급했습니다.

다음은 두 가지를 모두 사용하는 방법입니다.

:%! fmt -w 13 
:%! par 13gr 

당신은 또한 파 또는 FMT에 :formatprg을 설정할 수 있습니다 gq를 오버라이드 (override) :
$ echo -e 'long line is long!\nshort' > 3033423.txt 
$ cat 3033423.txt 
long line is long! 
short 
$ fmt -w 13 3033423.txt 
long line is 
long! short 
$ par 13gr 3033423.txt 
long line is 
long! short 

은 빔 내부에서 사용합니다. 자세한 정보는 Vim 내부의 :help formatprg으로 문의하십시오.

:%!fold -w 60

: DonaldSmith에서 코멘트에

10

덕분에 나는 텍스트의 내 긴 줄을 다시 포맷하지 않은 textwidth 옵션으로 (I 16 진수 - 투 - 바이트 변환을 가지고 노는 변환 된)이 발견 그것은 전체 파일 (나를 위해 한 줄이었습니다)을 길이 60 줄로 다시 만듭니다.

+0

이것은 매우 좋습니다.모든 해답은 줄이 단어로 공백을 나눌 때 줄의 너비를 제한하는 데 초점을 둡니다. 이 솔루션은 매우 긴 단어 (DNA 시퀀스)에 적용됩니다. – pedrosaurio

5

거의 항상 비주얼 모드에서 gq을 사용합니다. 나는 학생들에게 까다로운 사람들을위한 잡지 인 "Gentlemens 'Quarterly"를 의미한다고 말한다.

관련 문제