USR_30

*usr_30.txt*	Vim version 7.4 대상.  새로 고침: 2007년 11월 10일

		      VIM 사용설명서 - Bram Moolenaar 저
				       정지용 역

			      프로그램 편집하기


Vim에는 컴퓨터 프로그램 작성에 유용한 명령이 많이 있습니다.  프로그램을
컴파일하고 에러가 난 곳으로 바로 이동해 보세요.  다양한 언어의 들여쓰기를
자동으로 설정하고, 주석을 다듬어 보세요.

|30.1|	컴파일
|30.2|	C 스타일 파일 들여쓰기
|30.3|	자동 들여쓰기
|30.4|	다른 들여쓰기 방법
|30.5|	탭과 공백
|30.6|	주석 다듬기

다음 장: |usr_31|  GUI 활용하기
이전 장: |usr_29|  프로그램 코드 탐험하기
   차례: |usr_toc|


*30.1*	컴파일

Vim에는 "퀵픽스(quickfix)"란 기능이 있습니다.  퀵픽스를 사용하면 Vim 안에서
프로그램을 컴파일하고, 에러가 발생한 곳으로 이동하여 (가능하다면) 바로 고칠
수 있습니다.  에러를 수정한 후 다시 컴파일하고, 새로 발견된 에러를 수정하는
작업을 모든 에러를 없앨 때까지 반복하게 됩니다.

다음 명령은 "make" 프로그램을 (지정한 인자들을 그대로 넘겨서) 실행시키고, 그
결과를 얻어옵니다:

	:make {인자}

만약 에러가 발생했다면, Vim이 에러 내용을 읽은 후, 첫 에러가 발생한 곳으로
알아서 이동합니다.
   ":make"를 사용하는 예를 한번 살펴보도록 합시다. (이 예에서는 쉬운 설명을
위해 단순한 에러를 예로 들고 있습니다만, 일반적으로 :make를 처음 하는
경우라면 이것 보다 더 복잡한 에러가 많이 발생하겠지요.) ":make" 명령을
사용하면 대략 다음과 같은 내용을 볼 수 있습니다:

	:!make | &tee /tmp/vim215953.err 
	gcc -g -Wall -o prog main.c sub.c 
	main.c: In function 'main': 
	main.c:6: too many arguments to function 'do_sub' 
	main.c: At top level: 
	main.c:10: parse error before '}' 
	make: *** [prog] Error 1 

	2 returned 
	"main.c" 11L, 111C 
	(3 of 6): too many arguments to function 'do_sub' 
	계속하려면 엔터 혹은 명령을 입력하십시오 

위 내용으로 미루어보아 "main.c" 파일에 에러가 있다는 것을 알 수 있습니다.
<Enter>를 누르면, Vim은 "main.c"를 열고, 첫 에러가 발생한 6번째 줄로 커서를
옮깁니다.  파일이나 줄 번호를 직접 입력할 필요 없이, Vim이 에러 메시지를
알아서 해석한 후 어디로 가야할지 알아내는 것입니다.

		+---------------------------------------------------+
		|int main()					    |
		|{						    |
		|	int i=3;				    |
        커서 -> |	do_sub("foo");				    |
		|	++i;					    |
		|	return (0);				    |
		|}						    |
		|}						    |
		| ~						    |
		|(3 of 12): too many arguments to function 'do_sub' |
		+---------------------------------------------------+

다음 명령을 입력하면 다음 에러가 발생한 곳으로 갑니다:

	:cnext

파일의 마지막 줄인 10번째 줄로 이동했습니다.  '}'가 필요 없이 하나 더 있어서
에러가 발생했네요.
   메시지를 전부 표시할 공간이 없으면, 에러 메시지를 짧게 줄여서 표시합니다.
전체 메시지를 보려면:

	:cc

":clist" 명령을 사용하면 전체 에러 메시지를 확인할 수 있습니다.  다음과 같이
화면에 표시됩니다:

	:clist
	3 main.c: 6:too many arguments to function 'do_sub' 
	5 main.c: 10:parse error before '}' 

여기에는 make가 출력한 내용 중 Vim이 파일명과 줄 번호를 인식한 부분만
나옵니다.  이 부분들만이 의미 있는 내용이고, 나머지는 그다지 중요하지 않은
메시지로 간주하는 것이지요.  하지만, 가끔은 표시되지 않은 내용을 봐야하는
경우도 있습니다.  예를 들어, 정의되지 않은 함수에 대한 링커의 에러 내용에는
파일명이나 줄 번호가 없지요.  모든 메시지를 보려면, 명령에 "!"를 붙이면
됩니다:

	:clist!
	1 gcc -g -Wall -o prog main.c sub.c 
	2 main.c: In function 'main': 
	3 main.c:6: too many arguments to function 'do_sub' 
	4 main.c: At top level: 
	5 main.c:10: parse error before '}' 
	6 make: *** [prog] Error 1 

Vim은 현재 보고 있는 에러를 강조해 줍니다.  이전의 에러로 돌아가려면:

	:cprevious

에러 목록을 이동하는 다른 이동 명령들은 다음과 같습니다:

	:cfirst		첫 번째 에러로
	:clast		마지막 에러로
	:cc 3		3번 에러로


다른 컴파일러 사용하기
----------------------

":make" 명령을 사용했을 때 사용되는 프로그램의 이름은
'makeprg'(메이크프로그램) 옵션으로 지정합니다.  보통은 "make"로 설정
되어있습니다만, Visual C++ 사용자라면 다음 명령을 사용해서 "nmake"로
바꿔야하겠지요:

	:set makeprg=nmake

이 옵션에 인자를 미리 넣어놓을 수도 있습니다.  특수 문자는 백슬래시를
사용하여 입력해야 합니다.  예:

	:set makeprg=nmake\ -f\ project.mak

명령에 Vim의 특수 키워드를 포함시킬 수도 있습니다.  % 문자는 현재 파일의
이름을 의미합니다.  따라서 다음 명령을 실행시키면:

	:set makeprg=make\ %

main.c를 편집할 때는, ":make"가 다음 명령을 실행시킵니다:

	make main.c

이것만으로는 그다지 유용해 보이지 않습니다.  그렇다면 명령을 조금 바꾸고
:r(루트, root) 수식 명령어(modifier)를 사용해봅시다:

	:set makeprg=make\ %:r.o

이제 실행되는 명령은 다음과 같아집니다:

	make main.o

수식 명령어에 대해서는 |filename-modifiers|를 참고하십시오.


이전 에러 목록
--------------

":make"로 프로그램을 만들었다고 합시다.  하나의 파일에서는 경고(warning)
메시지가 나왔고, 다른 파일에서 에러(error) 메시지가 나왔다고 합시다.  에러를
메시지가 나는 파일을 고쳐서 제대로 고쳐졌는지 ":make"로 확인을 했습니다.  자,
이제 경고 메시지가 나오는 파일을 고쳐보고 싶은데, 다시 ":make"를 해버려서
경고 메시지는 이미 에러 목록에서 사라져버렸습니다.  경고 메시지가 나온 파일은
다시 컴파일 되지 않았기 때문이지요.  이런 경우, 다음 명령으로 이전의 에러
목록을 불러올 수 있습니다:

	:colder

그리고 ":clist"와 ":cc {번호}"를 사용해 경고 메시지가 나온 곳으로 움직이면
됩니다.
   다음 에러 목록으로 넘어가려면:

	:cnewer

Vim에는 에러 목록이 10개까지 저장됩니다.


컴파일러 바꾸기
---------------

다른 컴파일러를 사용하려면, 컴파일러가 내보내는 에러 메시지의 형식을 Vim에게
알려줘야 합니다.  'errorformat'(에러형식) 옵션에 지정하면 됩니다.  에러 형식
설정은 문법이 조금 복잡합니다만, 덕분에 거의 모든 컴파일러를 지원할 수
있습니다.  자세한 설명은 |errorformat| 을 참고하십시오.

여러 컴파일러를 다양하게 사용해야 할 수도 있습니다.  그럴 때 마다 'makeprg',
그리고 특히 'errorformat'을 설정하는 것은 번거롭겠지요.  쉬운 방법이 있습니다.
예를 들어, 마이크로소프트의 비주얼 C++ 컴파일러로 바꾸려면:

	:compiler msvc

위 명령은 "msvc" 컴파일러용 Vim 스크립트를 찾아서 적절하게 설정을 바꿀
것입니다.
   직접 컴파일러 스크립트를 만들 수도 있습니다.  |write-compiler-plugin|를
참고하십시오.


출력 리디렉션(Redirection)
--------------------------

":make" 명령은 실행된 프로그램의 출력을 파일로 리디렉트(redirect) 시킵니다.
리디렉션이 이루어지는 방식은 'shell'(셸)에 따라 다양합니다.  ":make" 명령이
제대로 출력을 처리하지 못한다면, 'makeef'(메이크오류파일)와
'shellpipe'(셸파이프) 옵션을 확인해보십시오.  그래도 안 된다면
'shellquote'(셸따옴표)와 'shellxquote'(셸x따옴표) 옵션도 확인해보십시오.

":make"의 리디렉션이 동작하지 않는 경우에는 다음 방법을 사용해보십시오.  먼저,
Vim 밖에서 프로그램을 컴파일하고, 결과를 파일로 리디렉트 시킵니다.  그리고
다음 명령으로 이 파일을 읽어 들입니다:

	:cfile {파일명}

":make" 했을 때와 마찬가지로 에러들을 살펴볼 수 있습니다.


*30.2*	C 스타일 파일 들여쓰기

프로그램은 적절히 들여쓰기가 되어 있어야 훨씬 이해하기 쉽습니다.  Vim에는
들여쓰기를 쉽게 해 주는 다양한 기능이 있습니다.  C 또는 Java나 C++ 같은 C
스타일 프로그램의 경우 'cindent'(C들여쓰기) 옵션을 켜십시오.  Vim은 C
프로그램을 아주 잘 이해하고, 자동으로 원하는 대로 들여쓰기가 될 수 있도록
많은 정보를 사용합니다.  'shiftwidth'(들여쓰기폭) 옵션으로 몇 칸씩 들여 쓸지
지정하십시오.  공백 네 개 정도가 적당합니다.  다음과 같이 ":set" 명령
한번이면 됩니다:

	:set cindent shiftwidth=4

위와 같이 설정하면 "if (x)" 같이 입력한 경우, 다음 줄이 자동으로 한 단계 더
들여쓰기 됩니다.

				    if (flag)
	자동 들여쓰기	   --->		do_the_work();
	자동 내어 쓰기	   <--	    if (other_flag) {
	자동 들여쓰기	   --->		do_file();
	들여쓰기 유지			do_some_more();
	자동 내어 쓰기	   <--	    }

중괄호({}) 안에 무언가 썼다면, 시작 부분에선 자동으로 들여쓰기가 되고, 끝
부분에선 다시 내어 쓰기가 됩니다.  블록이 언제 끝날지는 미리 알 수 없으므로,
내어 쓰기는 마지막 '}'를 입력하는 순간에 이루어집니다.

자동 들여쓰기를 사용하면 코드를 잘못 입력한 것을 빨리 알아차릴 수 있다는 것도
장점입니다.  }를 입력해서 함수를 끝냈는데, 예상했던 것보다 들여쓰기가 더
되어있다면, 아마도 어딘가에 }가 빠져서일 것입니다.  "%" 명령으로 방금 입력한
}에 어떤 {가 대응되는 지 확인해보면 됩니다.
   마지막에 )나 ;를 빼먹는 경우에도 들여쓰기가 더 됩니다.  들여쓰기가
예상보다 더 되었다면, 바로 앞줄을 확인해 볼 필요가 있겠지요.

형식이 엉망인 코드가 있거나, 몇 줄을 더 넣거나 지워서 전체적으로 들여쓰기를
다시 할 필요가 있을 때는 "=" 오퍼레이터를 사용하십시오.  가장 단순한 형태는
다음과 같습니다:



현재 줄의 들여쓰기를 맞추어줍니다.  다른 오퍼레이터들과 마찬가지로, 세 가지
방법으로 사용할 수 있습니다.  시각 모드에서는 "="가 선택된 줄들의 들여쓰기를
맞추어줍니다.  "="에 유용한 문자열 객체는 "a{" 입니다.  현재 {} 블록을
선택해줍니다.  따라서 현재 커서가 속해있는 코드 블록의 들여쓰기를 맞추려면:

	=a{

진짜로 코드가 엉망진창이어서, 전체 파일의 들여쓰기를 새로 맞추려면:

	gg=G

하지만, 이 명령을 손으로 일일이 들여쓰기 해놓은 파일에는 사용하지 마십시오.
자동 들여쓰기가 잘 동작하긴 하지만, 가끔은 다르게 들여 쓰고 싶을 수도
있으니까요.


들여쓰기 방식 설정
------------------

사람마다 들여쓰기 방식은 각양각색입니다.  Vim이 기본 설정일 때 90% 정도의
프로그래머들이 사용하는 일반적인 방식으로 들여쓰기를 잘 합니다.  하지만, 다른
방식을 쓰는 사람도 있습니다.  들여쓰기 방식은 'cinoptions'(C들여쓰기설정)
옵션으로 원하는 대로 바꿀 수 있습니다.
   'cinoptions'의 기본 값은 비어있는 것으로, 이때는 Vim의 기본 들여쓰기 방식을
사용합니다.  다르게 들여쓰기 하고 싶은 곳에 따라 다양한 들여쓰기 방법을 추가할
수 있습니다.  예를 들어, 중괄호가 다음과 같이 들여쓰기 되도록 하고 싶다면:

	if (flag) 
	  { 
	    i = 8; 
	    j = 0; 
	  } 

다음 명령을 사용하십시오:

	:set cinoptions+={2

이 외의 다양한 설정을 살펴보려면 |cinoptions-values|를 참고하십시오.


*30.3*	자동 들여쓰기

매번 C 파일을 열 때마다 'cindent' 설정을 켜려면 귀찮겠지요.  다음 명령을
사용하면 자동으로 설정이 켜집니다:

	:filetype indent on

사실, 위 명령은 C 파일에서 'cindent'를 켜는 것 외에도 여러 가지 일을 합니다.
먼저, 파일 형식을 인식하는 기능을 켭니다.  이 기능은 문법 강조에서도
사용됩니다.
   파일 형식을 인식하면, Vim이 그 형식을 위한 들여쓰기 파일을 찾습니다.
Vim은 다양한 프로그래밍 언어용 들여쓰기 파일과 함께 배포됩니다.  따라서
파일을 열었을 때 각 파일의 형식에 맞는 자동 들여쓰기를 사용할 수 있습니다.

자동 들여쓰기가 싫다면, 다음 명령으로 끄면 됩니다:

	:filetype indent off

어떤 파일 형식 한 가지 종류에서만 자동 들여쓰기를 끄고 싶다면, 다음과 같이
해보십시오.  먼저 다음과 같은 내용의 한 줄짜리 파일을 만드십시오:

	:let b:did_indent = 1

이제 이 파일을 다음과 같은 이름으로 저장합니다:

	{directory}/indent/{filetype}.vim

{filetype}은 "cpp"나 "java"같은 파일 형식을 나타내는 이름입니다.  Vim이
정확하게 어떤 파일 형식으로 인식했는지 보려면 다음 명령을 사용하십시오:

	:set filetype

예를 들어 이 파일에서 위 명령을 사용해보면:

	filetype=help {filetype}으로 "help"를 쓰면 됩니다.
   {directory} 부분에는 Vim의 런타임 디렉터리를 써주면 됩니다.  다음 명령으로
런타임 디렉터리를 확인해보십시오:

	set runtimepath

여기서는 첫 번째 디렉터리를 사용해봅시다.  첫 번째 쉼표 앞의 부분입니다.  즉,
출력이 다음과 같았다면:

	runtimepath=~/.vim,/usr/local/share/vim/vim70/runtime,~/.vim/after 

{directory}에 "~/.vim"을 사용하면 됩니다.  지금까지의 내용을 종합해보면 다음
파일에 저장하면 됩니다:

	~/.vim/indent/help.vim 

단순히 들여쓰기를 끄는 것보다, 들여쓰기 파일을 직접 만드는 것도 좋겠지요.
들여쓰기 파일을 만드는 방법은 |indent-expression|을 참고하십시오.


*30.4*	다른 들여쓰기 방법

가장 간단한 형태의 자동 들여쓰기는 'autoindent'(자동들여쓰기) 옵션을 켜면
됩니다.  바로 앞줄의 들여쓰기를 그대로 사용합니다.  약간 더 머리를 쓴 것이
'smartindent'(영리한들여쓰기) 입니다.  들여쓰기 파일이 없는 언어로 프로그램을
짤 때 유용합니다.  'smartindent'는 'cindent'만큼 영리하진 않지만,
'autoindent'보다는 낫습니다.
   'smartindent' 설정을 켜면, {가 나올 때마다 한 단계씩 더 들여쓰기가 되고,
}가 나올 때마다 한 단계씩 다시 내어 쓰기가 됩니다.  'cinwords'(C들여쓰기단어)
옵션에 있는 단어가 나오는 경우에도 한 단계 더 들여쓰기가 됩니다.  #으로
시작하는 줄은 특별히 취급해서 아예 들여쓰기가 되지 않습니다.  자연스럽게
전처리 지시자들이 줄의 맨 처음에 오게 됩니다.  다음 줄에는 다시 들여쓰기가
돌아옵니다.


들여쓰기 맞추기
---------------

'autoindent'나 'smartindent'를 사용하면 윗줄의 들여쓰기 정도가 사용됩니다.
'shiftwidth' 만큼 들여쓰기를 하거나, 내어 쓰기를 하고 싶을 때가 있겠지요.
가장 빠른 방법은 입력 모드에서 CTRL-DCTRL-T 명령을 사용하는 것입니다.
   예를 들어, 다음과 같은 셸 스크립트를 쓰려고 한다고 합시다:

	if test -n a; then 
	   echo a 
	   echo "-------" 
	fi 

다음과 같이 설정하고 시작합시다:

	:set autoindent shiftwidth=3

첫 번째 줄을 입력하고, <Enter>를 눌러 두 번째 줄로 갑니다:

	if test -n a; then 
	echo 

아, 들여쓰기를 한 단계 더 해야 되는 군요.  CTRL-T를 입력합시다.  결과는:

	if test -n a; then 
	   echo 

CTRL-T 명령은 입력 모드에서 'shiftwidth' 만큼 들여쓰기를 더 시킵니다.  커서가
줄의 어느 위치에 있든지 상관없습니다.
   두 번째 줄을 계속 입력하고, <Enter>로 세 번째 줄로 넘어갑시다.  제대로
들여쓰기가 되고 있습니다.  <Enter>를 누르고 마지막 줄로 갑시다.  다음과 같이
되었다고 합시다:

	if test -n a; then 
	   echo a 
	   echo "-------" 
	   fi 

마지막 줄의 들여쓰기 된 부분을 없애려면 CTRL-D를 누르십시오.
'shiftwidth'만큼 들여쓰기를 없애줍니다.  물론 현재 커서의 위치에 상관없습니다.
   보통 모드일 때는, ">>", "<<" 명령을 사용해서 들여쓰기를 맞추면 됩니다.
">"와 "<"는 오퍼레이터이므로, 앞에서와 같이 세 가지 방법으로 들여 쓸 부분을
지정할 수 있습니다.  다음 조합이 유용합니다:

	>i{

{} 블록 안의 내용을 한 단계씩 더 들여쓰기 시킵니다.  { 와 } 가 있는 줄들은
들여쓰기가 바뀌지 않습니다.  중괄호가 있는 줄까지 포함하려면 ">a{"를
사용하십시오.  다음 예는 커서가 "printf"에 있다고 가정한 것입니다:

	원래 내용		">i{" 한 경우		">a{" 한 경우

	if (flag)		if (flag)		if (flag) 
	{			{			    { 
	printf("yes");		    printf("yes");	    printf("yes"); 
	flag = 0;		    flag = 0;		    flag = 0;  
	}			}			    } 


*30.5*	탭과 공백

'tabstop'(탭크기)의 기본 값은 8입니다.  이 값을 바꿀 수는 있지만, 여기저기서
문제가 생길 수 있습니다.  다른 프로그램들에서는 탭 크기가 얼마인지 모르기
때문입니다.  대부분은 기본 값인 8을 사용할 것이고, 탭 크기를 바꿨다면 내용이
이상하게 깨져서 보일 것입니다.  또, 대부분의 프린터는 탭 크기가 8로 고정되어
있습니다.  따라서 'tabstop'은 바꾸지 않고 그대로 두는 것이 좋습니다.  (다른
탭 크기 값에 맞추어 작성된 파일을 편집할 때는 |25.3|을 참고하여 수정하십시오.)
   프로그램에서 들여쓰기를 할 때 여덟 칸씩 들여쓰기를 하면 금세 창의 오른쪽
끝까지 차버립니다.  그렇다고 한 칸씩만 들여쓰기를 하면 보기에 너무
불편하겠지요.  그래서 대부분의 사람들은 절충해서 네 칸을 사용합니다.
   <Tab>은 여덟 칸의 공백에 해당하고, 우리는 네 칸의 공백을 사용하고 싶으니,
들여쓰기를 할 때 <Tab> 문자를 사용할 수는 없습니다.  따라서 다음 두 가지
방법으로 이 문제를 해결합니다:

1.  <Tab>과 공백을 섞어서 사용하기.  <Tab>은 여덟 칸의 공백에 해당하므로,
    파일의 크기가 작아지게 됩니다.  여덟 번 공백을 입력하는 것 보다는
    <Tab> 한 번 입력하는 것이 더 빠르고, 백스페이스도 빠르게 동작합니다.

2.  공백만 사용하기.  다른 탭 크기를 사용하는 프로그램에서 발생하는 문제를
    완전히 없애줍니다.

물론 Vim은 두 가지 방법 모두 잘 지원합니다.


공백과 탭
---------

탭과 공백을 섞어서 사용한다고 해도, 그냥 쓰고 싶은 내용을 입력하면 됩니다.
Vim이 기본 설정으로도 공백들을 알아서 잘 처리해줍니다.
   'softtabstop'(소프트탭크기) 옵션을 사용해서 조금 더 편하게 할 수도
있습니다.  이 옵션은 마치 탭 크기가 'softtabstop' 값인 것처럼 <Tab>키를
사용할 수 있게 해줍니다.  하지만 실제로는 탭과 공백이 섞여서 사용됩니다.
   다음 명령을 사용하면, <Tab>키를 누를 때마다 커서가 네 칸씩 오른쪽으로
움직입니다:

	:set softtabstop=4

첫 번째 칸에서 <Tab>을 누르면, 공백이 네 개 입력됩니다.  또 한 번 <Tab>을
누르면, 네 개의 공백이 사라지고, <Tab> 문자가 들어가면서, 아홉 번째 칸으로
커서가 이동합니다.  즉, 최대한 <Tab>을 넣고, 남는 들여쓰기 부분은 공백으로
마무리합니다.
   백스페이스를 사용할 때도 마찬가지 방식입니다.  <BS>는 항상
'softtabstop'만큼의 공백을 지웁니다.  역시 <Tab>을 최대한 채우고, 남는 부분을
공백으로 채웁니다.
   다음 예는 <Tab>을 몇 번 누르고, <BS>를 눌렀을 때의 상황입니다.  "."은
공백을, "------->"는 <Tab>을 의미합니다.

	입력			  결과 
	<Tab>			  ....
	<Tab><Tab>		  ------->
	<Tab><Tab><Tab>		  ------->....
	<Tab><Tab><Tab><BS>	  ------->
	<Tab><Tab><Tab><BS><BS>   ....

또 다른 방법은 'smarttab'(영리한탭) 옵션을 사용하는 것입니다.  이 옵션을 켜면,
들여쓰기 부분에 <Tab>을 입력했을 때는 'shiftwidth'를 넣고, 공백이 아닌 문자가
나온 이후에 입력하면 진짜 <Tab>을 넣습니다.  하지만, <BS>가 'softtabstop' 같이
동작하지는 않습니다.


공백만 사용하기
---------------

파일에서 탭을 아예 사용하지 않으려면, 'expandtab'(탭확장) 옵션을 켜면 됩니다:

	:set expandtab

이 옵션이 켜지면, <Tab>키를 눌렀을 때 항상 공백들이 입력됩니다.  따라서
<Tab> 문자가 입력되었을 때와 동일한 만큼의 공백이 나타나지만, 진짜 <Tab>
문자는 전혀 입력되지 않습니다.
   백스페이스는 항상 공백 하나씩 만을 지웁니다.  따라서 <Tab>을 한번 입력한
후에 이를 다시 지우려면 <BS>를 여덟 번 눌러야 합니다.  들여쓰기 부분이라면
CTRL-D로 더 빠르게 지울 수 있습니다.


탭을 공백으로 바꾸기 (공백을 탭으로도)
--------------------------------------

'expandtab'을 설정해도, 이미 파일에 들어있는 탭에는 영향이 없습니다.  즉, 원래
탭이 있었으면 계속 탭인 채 남아있습니다.  ":retab"(탭다시) 명령은 이런 탭들을
공백으로 바꿔줍니다.  다음 명령을 사용해보십시오:

	:set expandtab
	:%retab

이제 모든 들여쓰기에 탭이 아닌 공백을 사용하도록 바뀌었을 것입니다.  하지만,
공백이 아닌 문자가 나온 이후에 나오는 탭들은 그대로 유지됩니다.  이런
것들까지도 바꾸려면 !를 추가하십시오:

	:%retab!

이 명령은 사실 좀 위험합니다.  문자열 상수 안에 있는 탭까지 공백으로
바꿔버리기 때문입니다.  이런 경우가 있는지는 다음과 같이 찾아보면 됩니다:

	/"[^"\t]*\t[^"]*"

일반적으로는 문자열 안에 진짜 탭 문자를 안 넣는 것이 좋겠지요.  "\t"를
사용하면 문제를 사전에 예방할 수 있습니다.

반대로 공백을 탭으로 바꾸는 것도 잘 동작합니다:

	:set noexpandtab
	:%retab!


*30.6*	주석 다듬기

Vim의 뛰어난 점 중 하나는 주석을 인식한다는 것입니다.  Vim으로 주석을 다듬을
수 있습니다.
   예를 들어, 다음과 같은 주석이 있다고 합시다:

	/* 
	 * 아~ 아~ 주석 
	 * 다듬기 테스트 중입니다. 
	 */ 

이제 커서를 주석이 시작하는 부분에 놓고 다음 명령을 사용해봅시다:

	gq]/

"gq"는 형식을 맞추는 오퍼레이터입니다.  "]/"는 주석의 끝으로 이동시키는
동작입니다.  결과는 다음과 같습니다:

	/* 
	 * 아~ 아~ 주석 다듬기 테스트 중입니다. 
	 */ 

각 줄의 시작 부분이 깔끔하게 처리된 것을 볼 수 있습니다.
  형식을 다듬을 부분을 시각 모드에서 선택한 다음에 "gq"를 사용해도 됩니다.

주석에 줄을 추가하려면, 커서를 가운데 줄에 놓고 "o"를 누르십시오.  결과는
다음과 같습니다:

	/* 
	 * 아~ 아~ 주석 다듬기 테스트 중입니다. 
	 * 
	 */ 

별표와 공백이 자동으로 들어갔습니다.  주석 내용을 바로 넣으면 되겠지요.
길이가 'textwidth'(내용폭)보다 길어지면 자동으로 줄이 넘어갑니다.  물론 별표도
자동으로 입력됩니다:

	/* 
	 * 아~ 아~ 주석 다듬기 테스트 중입니다. 
	 * 줄 바꿈이 자동으로 되도록 아무거나 막 
	 * 넣어봅시다 
	 */ 

이 기능이 제대로 동작하려면, 'formatoptions'(형식설정)에 몇 가지가
설정되어있어야 합니다:

	r	입력 모드에서 <Enter>를 입력할 때 자동으로 별표 입력
	o	보통 모드에서 "o"나 "O"사용 시 자동으로 별표 입력
	c	'textwidth'에 따라 주석 안에서 줄 바꿈

더 많은 설정 내용은 |fo-table|에서 확인하십시오.


주석 정의하기
-------------

'comments'(주석) 옵션은 주석이 어떻게 생겼는지 지정합니다.  Vim은 한 줄짜리
주석, 그리고 시작, 끝, 중간 부분이 각각 다르게 생긴 주석들을 인식할 수
있습니다.
   대부분의 한 줄짜리 주석은 특정한 문자로 시작합니다.  C++은 // 로 시작하고,
메이크파일(Makefile)은 #으로, Vim 스크립트는 "로 시작합니다.  예를 들어,
Vim이 C++ 주석을 인식하도록 하려면:

	:set comments=://

콜론은 플래그와 주석 인식을 위한 문자열을 구분하기 위한 것입니다.
'comments'의 일반적인 형태는:

	{flags}:{text}

{flags}부분은 위에서와 같이 비어있을 수도 있습니다.
   여러 주석 형태는 쉼표를 사이에 넣고 쭉 이어서 쓰면 됩니다.  동시에 여러
가지 형식의 주석을 인식할 수 있도록 말이지요.  예를 들어, 이메일을 편집한다고
합시다.  답장을 보낼 때, 다른 사람이 쓴 부분은 ">"나 "!"가 앞에 붙습니다.
다음 명령을 사용하면 됩니다:

	:set comments=n:>,n:!

두 가지 주석 형태가 있는데, 하나는 ">"로 시작하고 하나는 "!"로 시작합니다.  둘
다 "n" 플래그를 사용하고 있습니다.  "n"은 주석이 중첩될 수 있다는 의미입니다.
따라서 ">"로 시작하는 줄에는 ">" 다음에 다른 주석이 또 나올 수 있습니다.
따라서 다음과 같이 사용할 수 있습니다:

	> ! 그 사이트 가보셨어요? 
	> ! 진짜 대단해요. 
	> 전 좀 별로던데.  색이 
	> 너무 이상해요. 
	그 사이트 URL이 
	뭐예요? 

'textwidth'를 다른 값으로(예를 들어 80으로) 해놓고, 시각 모드에서 위 내용을
선택한 후, "gq"를 적용해보십시오.  결과는 다음과 같습니다:

	> ! 그 사이트 가보셨어요? 진짜 대단해요. 
	> 전 좀 별로던데.  색이 너무 이상해요. 
	그 사이트 URL이 뭐에요? 

다른 주석 영역끼리는 내용이 붙지 않았습니다.  두 번째 줄의 "전"은 첫 번째 줄의
뒤 쪽에 붙을 수도 있습니다만, 첫 번째 줄은 "> !"로 시작하고, 두 번째 줄은
">"로 시작하므로 두 줄이 서로 다른 종류의 주석이라고 판단하고 붙이지 않은
것입니다.


세 부분으로 이루어진 주석
-------------------------

C의 주석은 "/*"로 시작하고, 중간에 "*"들이 들어가고, "*/"로 끝납니다.  이
형태를 'comments' 형식으로 표현해보면 다음과 같습니다:

	:set comments=s1:/*,mb:*,ex:*/

시작 부분은 "s1:/*"와 같이 정의됩니다.  "s"는 세 부분 중 시작 부분이라는
의미입니다.  플래그와 주석 문자열을 구분하는 콜론이 나오고, 실제 주석을
표시하는 문자열인 "/*"가 나왔습니다.  또 하나의 플래그인 "1"은 주석의 중간
부분에 공백 한 칸 만큼이 필요하다는 의미입니다.
   가운데 부분인 "mb:*"는 가운데 부분임을 나타내는 "m"으로 시작합니다.  "b"는
주석기호 다음에 공백이 와야 함을 의미합니다.  이 플래그가 없다면 "*pointer"와
같은 것까지 주석의 일부로 잘못 처리할 수도 있습니다.
   끝 부분인 "ex:*/"의 "e"는 끝 부분임을 나타냅니다. "x"는 특별한 의미가
있는데, Vim이 새로운 줄에 자동으로 별표와 공백을 입력해 주었을 때, 사용자가
/를 입력하면 별표 다음의 공백을 자동으로 지워주라는 의미입니다.

더 자세한 내용은 |format-comments|를 참고하십시오.


다음 장: |usr_31|  GUI 활용하기

저작권: |manual-copyright| 참고  vim:tw=78:ts=8:ft=help:norl:

Generated by vim2html on 2013. 12. 14. (토) 20:47:01 KST