vim tips - 2. Playing with make

Computing/vim tips 2008. 12. 10. 02:03

Notice : 본 일련의 vim tips 시리즈를 보려면 category 에서 vim-tips 를 눌러 보면 된다.

1. TAGS 사용하기

http://orchistro.tistory.com/entry/vim-tips


2. Playing with make

만약 이 글을 읽고 있는 여러분이 프로그래머라면, 지금부터 설명하려고 하는 내용이 매우 큰 도움이 될 것이다.

프로그램을 만들다 보면 일상은 아래와 같은 일의 반복이 된다 :

$ make
.... blablablabla ....
foo.c:125: error: dereferencing... blabla
....
$ vim foo.c

이 반복 작업을 보다 빠르고 효율적으로 만들어 주는 기능이 vim 에 있다.


2-1. vim 을 이용한 프로그램 빌드

우선, 실습을 위해 아래와 같은 파일들을 만들자 :

Makefile :

size.h :

size.c :

main.c :

파일 내용은 정확히 입력해야 한다. 에러를 발생시키기 위해서 일부러 오류를 섞어 두었기 때문이다. 소스 리스트 윗부분에 있는 "copy to clipboard" 를 클릭하면 복사가 되니 참고하자.

입력이 끝났으면 vim 을 열어서,

vim main.c

:make -k 를 타이핑 하고 엔터키를 누르자. make 에 -k 옵션을 주면 에러가 나도 중지하지 않고 끝까지 수행한다.


그러면 아래와 같은 화면이 나온다. 시키는 대로 ENTER 키를 눌러 주자 :

ENTER 키를 누르면 아무것도 나오지 않지만, 화면에 열려 있는 파일이 main.c 가 아닌 size.c 로 바뀌어 있을 것이다.

이제 :copen 을 입력해 보자. vim 화면 아랫쪽에 작은 분할 윈도우가 나타난다. 이 때 나타나는 분할 윈도우(split window) 를 "Quickfix window" 라고 하는데, 이에 대한 자세한 내용은 다음 기회에 다루자. 정 궁금하면 :help quickfix 라고 vim 에서 입력하면 친절한 도움말이 나오니까 그것을 활용하자 :


quickfix window 안의 내용을 자세히 보면, make -k 에 대한 실행 결과이다. 그리고, 현재 커서가 위치해 있는 곳 (위 그림에서 하이라이트 되어 있는 곳) 에서 ENTER 키를 누르면 size.c 의 12번째 줄로 커서가 움직여 갈 것이다.

해당 줄은 gcc 가 출력해 준 컴파일 에러가 발생한 라인이다. 이전에는 일일이 커맨드라인에서 make 를 입력하고, 에러가 발생하면 어디서 났는지 한참 읽어본 후, 보기 어려운 라인 넘버를 눈썹을 찡그려 가면서 찾은 후에 해당 파일을 열고 그 라인으로 점프해 가는 일을 해야만 했으나, 이처럼 vim 에서 :make 를 곧장 입력함으로써 위의 과정이 make 한번 입력하는 것으로 단순하게 바뀌었다.

split window 를 옮겨 다니는 커맨드인 ^Wj 를 이용해서 (현재 커서가 size.c 안에 있다고 가정) quick fix window 로 이동한 후, main.c 의 warning 을 보도록 하자. 우선, 커서를 아래 그림에서 볼 수 있는 것 처럼 해당 warning 이 표시된 줄로 이동하자.


이 상태에서 ENTER 키를 치면 편집 윈도우의 파일이 main.c 로 바뀌면서 커서는 8번째 라인에 정확하게 위치해서 수정을 기다리고 있게 된다 :

이런 식으로 build 과정에서 발생한 에러를 손쉽게 알 수 있고, 에러가 난 파일의 위치로도 매우 간편하고 빠르게 찾아갈 수 있다.


2-2. 간단한 quickfix window 명령어들 몇가지

그런데, 앞 절에서 예시한 것처럼 일일이 quickfix window 로 들어가서 커서를 움직여서 엔터키를 치는 것도 자꾸 하다 보면 귀찮다.

몇가지 명령어를 나열해 볼 테니 직접 사용해 보자.

  • :cn[ext] --> quickfix window 에 list up 된 항목들 중 현재 하일라이트 되어 있는 항목의 다음 항목으로 이동
  • :cp[rev] --> 이전 항목으로 이동
  • :cope[n] --> quickfix window 를 표시함
  • :ccl[ose] --> quickfix window 를 닫음 (닫는다고 그 안의 내용이 사라지는 것은 아님. :copen 을 하면 고스란히 남아 있는 내용을 볼 수 있음)

위의 두 가지 커맨드를 map 해 두고 사용하면 매우 편리하다 :

$ cat .vimrc
...
nnoremap <silent> <F1> :cp<cr> " 이전 에러 라인으로
nnoremap <silent> <F2> :cn<cr> " 다음 에러 라인으로
...
$

이제, 따로 터미널을 열어서 make 를 타이핑하는 일 없이 vim 에서 :make 를 타이핑하고, 발생한 에러나 워닝을 편리하고 빠르게 F1, F2 키로 옮겨 다니면서 체크할 수 있다. 개발 속도가 훨씬 증가할 것이다 :-)

Good Luck!


4. Playing with grep

http://orchistro.tistory.com/entry/vim-tips-3-Playing-with-grep

4. quickfix window

5. navigating through source file(s)

6. help



: