Vim에서 텍스트를 정당화 할 수 있습니까?


38

Vim이 아닌 Pico 또는 Nano에서 텍스트 파일을 편집 한 유일한 이유는 "Justify"명령 ^J이었습니다. 텍스트 단락을 다시 포맷하여 단어 나누기에서 줄 바꿈을 만들어 텍스트가 고정 너비 화면에 잘 띄울 수 있도록 사전 정의 된 80 열에 맞게 텍스트를 서식 지정하여 단어 사이에만 줄 바꿈을 만듭니다. 기능이 제한되었으므로 긴 주석 블록, 문서 파일을 형식화하거나 끝없는 매개 변수 행을 더 읽기 쉬운 형식으로 바꾸는 것이 매우 유용했습니다.

Vim에서 그런 식으로 할 수 있습니까?

답변:


37

gq또는 gw연산자를 모션 명령과 함께 사용할 수 있습니다 . 기본적으로 fmt프로그램은 Linux 에서 프로그램을 사용하여 지정된 텍스트를 형식화합니다. 그러나 내가 아는 한, 선을 정당화하지 않으므로 올바른 마진을 얻을 수 있습니다.

내가 사용하는 방법 gwip은 단락에 커서를 놓고 (정상 모드)하는 것입니다. 커서를 같은 위치에 유지하면서 현재 단락의 서식을 지정합니다. 이 방법을 사용하여 현재 단락 만 형식화되도록하십시오. 텍스트 파일을 편집 할 때 파일 gwG시작 부분에서 발행 (일반 모드)하면 전체 텍스트의 형식이 지정됩니다. 모범 사례로 단락 사이에 빈 줄을 하나 이상 비워 두십시오.

수행 할 수있는 많은 구성이 있습니다. 우선, 여기에 몇 가지 관련 도움이된다 : :h gq, :h gw, :h fo(형식 옵션), :h fp(포맷 프로그램), :h fo-table(가능한 옵션에 대한 설명).


1
gq / gw는 확실히 갈 길입니다. 이 메시지에 추가하기 위해 더 많은 옵션을 갖도록 형식 프로그램을 변경할 수 있습니다. 체크 아웃 vimcasts.org/episodes/formatting-text-with-par
Bambu

3
Vim은 기본적으로 외부 프로그램을 사용하지 않지만 'formatprg'옵션 을 설정하여 사용하도록 선택할 수 있습니다 .
jamessan

15

이 주제에 관한 훌륭한 VimCast가 있습니다.

http://vimcasts.org/episodes/formatting-text-with-par/

기본적으로 다음을 설치해야합니다 par.

$ brew install par
# or
$ sudo apt-get install par

그런 다음 열을 80 열로 줄 바꿈하려면 다음을 수행하십시오.

:set formatprg=par\ -w80

이제 gq다른 답변과 같이 연산자 를 사용할 수 gqip있으며 Vim의 내장 포맷터 대신 Par를 사용합니다.

Par는 상당히 발전했으며 다음과 같이 주석을 멋지게 형식화합니다.

/* This is a long */
/* multiline comment */

11

보낸 사람 :help usr_25:

JUSTIFYING TEXT                                                                 

Vim has no built-in way of justifying text.  However, there is a neat macro     
package that does the job.  To use this package, execute the following          
command:                                                                        

        :runtime macros/justify.vim                                             

This Vim script file defines a new visual command "_j".  To justify a block of  
text, highlight the text in Visual mode and then execute "_j".

그래서 당신이해야 할 일은 실행

:ru macros/justify.vim

그런 다음

_j

전체 파일의 텍스트를 정당화합니다.

(물론, ru macros/justify.vim.vimrc에 추가 하여 매번 입력 할 필요가 없습니다.)

참고 : 이것은 줄 바꿈을 추가 하지 않습니다 . 을 사용하여 수동으로 추가해야합니다 gq. 이를 위해 다음을 통해 textwidth(기본값은 0)을 원하는 값으로 설정해야합니다.

set textwidth=80

t-flag via를 설정하여 원하는 경우 자동 텍스트 줄 바꿈

set formatoptions+=t

원하는 경우 .vimrc에 매핑을 설정하여 전체 작업을 수행 할 수 있습니다.

nnoremap <C-j> gggqG_j

이렇게하면 파일의 시작 부분 ( gg)으로 이동하고 모든 줄을 줄 바꿈 ( gq까지 G) 한 다음 _j텍스트 를 정렬합니다.


서식에 대한 자세한 내용은 다음을 참조하십시오. VIM 사용 설명서-서식있는 텍스트 편집
Suuuehgi

방금 :set fo+=a전체 단락을 자동으로 다시 포맷하는 데 유용한 옵션을 찾았습니다 . :help fo-table다른 옵션을 살펴보십시오 . 여기에 좋은 비디오 자습서가 있습니다 .
Suuuehgi

완전히 내장 된 솔루션의 경우 +1 _j매크로에 의해 추가 매핑은 나를 위해 전체 파일을 정당화하는 것, 또는이 라인 방식 시각적 인 선택으로 제한 할 수 있습니다.
ches

5

nano는 ^J"Justify" 라는 명령을 호출하는 데 도움이되지만 실제로 텍스트를 정당화 하지는 않지만 화면의 오른쪽 여백 (또는 구성 가능한 일부 열) 앞에있는 줄을 바꾸어 텍스트를 다시 포맷합니다.

당신은 변수를 설정하여 VIM에서 같은 일을 할 수 textwidth에서 :help 'textwidth':

삽입되는 최대 텍스트 너비. 이 너비를 얻으려면 공백 후에 긴 줄이 끊어집니다. 값이 0이면이 기능이 비활성화됩니다.

즉, 입력하는 동안 줄이 textwidth문자 보다 길면 VIM은 줄 길이를보다 작거나 같게 유지하기 위해 첫 번째 공백에서 줄을 줄 바꿈합니다 textwidth.

이 작업을 수행하려면 옵션 formatoptions에 문자가 포함되어야합니다 t. 참조 :help 'formatoptions':help fo-table사용 가능한 옵션에 대한 예를 들어, 당신은에 관심이있을 수 있습니다 c의견 작업을 포맷 할 옵션을 선택합니다.

편집 : 당신은 넣을 필요없이, 동일한 작업을 수행 할 수 t있는 formatoptions명령을 사용하여, gw{motion}현재의 커서 위치 이후 커서의 위치 사이의 텍스트를 포맷, {motion}. 이 gw명령은 시각 모드에서도 사용할 수 있으며 선택한 텍스트의 형식을 지정합니다.


1
타이핑에 좋습니다. 기존 텍스트에 적용 할 수 있습니까?
SF.

3

다음 두 가지 쉬운 옵션이 있습니다.

  1. 텍스트 블록이 선택된 상태에서 !fmt
  2. 블록 시작 부분에 커서를 놓고 !}fmt

이 두 가지 모두 텍스트 블록을 unix로 보냅니다 ( 옵션 fmt참조) man fmt. vim에서 옵션 인수를 전달할 수 있습니다. 예를 들어, 50 자 너비의 블록을 포맷하려면을 입력하십시오 !}fmt -w 50.


그것에 대해 죄송합니다, 지금 수정
kaan

결과가 마음에 들지 않으면 :%!fmt하나 를 입력 하고 실행 취소 하여 전체 파일의 형식을 지정할 수도 u있습니다.
와일드 카드

-1

시각적 명령을 사용하여 텍스트를 표시 한 후 다음을 사용하십시오.

:!par 40j 

여기서 40은 열 너비이며 자리 j맞추기를 의미합니다.


2
우리 사이트에 오신 것을 환영합니다! 귀하의 질문은 현재 사용중인 도구 ( par) 에 대한 설명 과 솔루션이 작동하는 이유 에 대한 설명이 부족하여 현재 품질이 낮은 것 입니다. 답변의 품질을 높이고 향후 독자에게 더 유용하게 만들 수 있도록 세부 정보를 추가 할 수 있습니다.
statox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.