vim에서 make시에 에러가 나는 sub directory로 자동으로 이동하

ktd2004의 이미지

얼마전에 kldp에 질문을 올렸다가 겨우 어떻게 알아내서 이렇게 내용을 올립니다.

기존에 vim에는 clist, cn, cp, cw,... 등의 명령이 있습니다.
vim의 command-line모드에서 컴파일을 수행한후 경고나 에러가 발생한 문서로 자동으로 이동하는 기능과 관련된 명령들입니다.

그런데 "make -C"를 사용하는 경우에 sub directory내의 파일로는 이동을 하지 않더군요. 그래서 errorformat 변수를 다음과 같이 설정해서 해결했습니다.

.vimrc파일에 다음의 내용을 추가합니다.

set errorformat+=%Dmake[%*\\d]:\ 들어감\ `%f'\ 디렉토리,%Xmake[%*\\d]:\ 나감\ `%f'\ 디렉토리

사용환경은 RedHat9, vim6.2.21, gcc3.2.1, make 3.79.1등입니다.

간단하게 설명드리면

errorformat은 errorformat에서 지정한 형태의 pattern이 나오면 지정한 값들에 들어온 pattern을 적당히 맵핑시켜서 error에 대한 정보를 저장할 수 있게 한 것입니다.(scanf처럼)

간단한 예를 들면
set errorformat=%f:%l:%m
이라고 지정해놓으면
a.c:3:unused variable.
와 같이 에러가 출력되면
에러가 발생한 파일(%f)은 a.c
에러가 발생한 라인(%l)은 3
에러의 내용(%m)은 unused variable
와 같이 parsing됩니다.

하지만 sub directory의 이동인 경우에 이 포맷에 해당 정보가 출력되지 않습니다.
따라서 directory stack을 사용해야 합니다.

제가 사용하는 make프로그램에서의 디렉토리 이동시의 출력은 다음과 같습니다.

make[1]: 들어감 `/usr/src/linux/driver/net' 디렉토리
make[2]: 나감 `/usr/src/linux/driver/net' 디렉토리

따라서 위에서 설정한 errorformat은 디렉토리의 이동을 vim에게 알려주는 역활을 합니다.

참고 :
help errorformat
help quickfix-directory-stack

Forums: