'인덴테이션 고치기'에 해당되는 글 1건

  1. 2009.12.01 VIM 편집기에서 탭과 인덴테이션 수정하기
We can work IT out2009. 12. 1. 13:25
최근에 저는 필요에 따라 GNU make 의 latest 인 3.8.1 의  소스코드를 수정하고 있습니다. 커맨트가 꽤 잘 달려있긴 하지만 GNU 코드 컨벤션을 따르고 있음에도 인덴테이션이 엉망으로 되어있더군요. 윈도우즈, MSDOS, AMIGA, EMX, VMX 등 유닉스가 아닌 환경에 대한 경우와, 유닉스라 해도 POSIX 따위에 대한 라이브러리 존재 여부에 대한 조건 정의들이 많아서 "#ifdef" 같은 코드를 읽기 어렵게 만드는 키워드들이 난무하는데다가 인덴테이션까지 엉망이니 도무지 코드 읽기가 쉽지 않더군요.

조금만 살펴보면 인덴테이션이 인의적으로 엉망이 된 게 아니라 사실은 tabstop 의 문제임을 확인할 수 있습니다. 이런 경우가 자주 발생하는 건 편집기 환경에 따라서는 소스코드의 탭tab과 인덴테이션indentation이 엉망이 돼버리는 경우가 생기기 때문이죠. 다수의 사람이 윈도우즈와 유닉스를 오가며 VIM, Eclipse, UltraEdit 등의 다수 편집기로 편집하다보면 왕왕 발생할 수가 있죠. VIM 하나만 사용한다 해도 사용자 각자의 설정에 따라서는 탭이 4개 또는 8개의 스페이스space 문자로 바뀐다거나 하면서 추가적인 편집에서 귀찮은 일들을 만들곤 합니다.

VIM 사용자라면 이런 귀찮은 일들을 한 방에 해결할 수 있습니다. 설명은 일단 생략하고 VIM 의 커맨드라인 모드에서 다음의 순서로 입력하기만 하면 됩니다.
:set tabstop=8
:set filetype=c
:filetype indent on
:e
gg=G

이제 각 라인에 대한 설명입니다. 위 3번 라인을 실행하기 전에 커맨드라인 모드에서 아래를 실행하면 "filetype detection:ON plugin:ON indent:OFF" 라고 나올 겁니다.


:filetype

물론 .vimrc 파일에 설정에 따라서 다르게 나올 수도 있지만 일단 indent:OFF 상태인 걸 확인합니다. 만약 indent:ON 인 상태면 위 3번 라인을 실행할 필요가 없으니까요. 이제 하나씩 들어가보죠.


:set tabstop=8

tabstop 이 4 로 되어있었다가 특정 편집 환경으로 가면 탭 문자 '\t' 가 스페이스 4개로 바뀌는 경우가 생깁니다. 그리고 또다시 tabstop 이 8 로 된 편집환경에서 탭을 통한 인덴테이션이 추가되면 결국 탭과 스페이스가 마구 섞이는 경우가 만들어지죠. 그래서 일단은 탭을 스페이스 여덟칸으로 표준화 해줘야 합니다. tabstop 이 4 로 되어있을 경우 나머지 과정을 실행하면 탭 두개, 또는 탭 하나와 스페이스 네 개를 한 번은 인덴테이션인 것처럼 출력될 수도 있습니다.


:set filetype=c

인덴테이션할 형식을 C 언어로 합니다. xml, java, ruby 등 필요에 따라 설정하면 됩니다. 지원하는 인덴테이션 형식은 아래 커맨드로 확인할 수 있습니다.

:e $VIMRUNTIME/indent


:filetype indent on
:e

파일 타입에 대한 인덴테이션을 켠 후 바뀐 환경에 대해서 편집할 파일을 다시 읽어들입니다.


gg=G

첫번째 줄(gg) 부터 마지막 줄(G) 까지 인덴테이션 기능(=)을 행별로 실행하라는 의미입니다.
 
Posted by Lyle