728x90
vim 으로 소스에 선언된 함수나 변수를 확인하기 위해 ctags 를 많이 사용합니다.
보통 하위 디렉토리까지 확인하기 위해 "-R" 옵션을 줍니다. 그런데, 하위 디렉토리에서 참조한 함수에서 다시 그 디렉토리에 존재하는 함수를 다시 찾을때(ctrl+']') 찾지 못하는 경우가 있습니다.
예를 들어, 현재 디렉토리에 a.c 가 존재하고, a.c 에 func_a() 를 호출합니다. func_a() 는 b 디렉토리의 c.c 에 존재합니다. b 디렉토리의 c.c 에서는 func_b() 를 호출합니다.
# ls
a.c b/
# more a.c
main()
{
func_a();
}
# ls b
b.c c.c
# more b/b.c
func_b()
{
int b;
}
# more b/c.c
func_a()
{
func_b();
}
# ctags -R *
# vim a.c
func_a() 를 찾으면(ctrl+']'), b/c.c 를 보입니다. 여기서 다시 func_b() 를 찾으면(ctrl+']') 를 찾으면 "cstag: 태그를 찾을 수 없습니다" 라는 에러메시지를 냅니다.
이때 사용된, tags 설정은(.vimrc) 아래와 같습니다.
set tags=./tags,../tags,../../tags,../../../tags,../../../../tags
tags 파일을 열어보면 다음과 같은 내용으로 되어 있습니다.
aa_func aa.c /^aa_func()$/;" f
func_a b/c.c /^func_a()$/;" f
func_b b/b.c /^func_b()$/;" f
main a.c /^main()$/;" f
tags 파일만 보면 될꺼 같은데, 태그를 찾을 수 없다는 에러가 나옵니다. 고심끝에 .vimrc 의 tags 설정을 다음과 같이 바꿨더니 제대로 동작하네요.
set tags=./tags,tags,../tags,../../tags,../../../tags,../../../../tags
아니면, b 디렉토리에서 ctags 를 한번 더 실행해서 b/tags 를 생성시켜도 제대로 동작합니다.
'Engineering > Etc' 카테고리의 다른 글
svn externals 사용하기 (0) | 2011.04.12 |
---|---|
Active X 대체기술 (0) | 2011.03.31 |
리눅스 시리얼 통신 정리_링크된 글입니다. (0) | 2010.12.14 |
VIM 종합 설명 사이트 (0) | 2010.11.09 |
CentOS 5 에서 yacc 명령어가 없을 때 설치 (0) | 2010.10.14 |