2012-11-24 2 views
4

좋은 하루에 여러 위치에서 소싱 태그,VIM - 프로젝트

나는 일반적으로 비교적 작은 (코드 미만 20,000 선), 하나의 디렉토리에 포함 된 모든자가되어 자신의 메이크 파일이 프로젝트에서 작동

하고, 함께 일하기가 상당히 쉽습니다.

VIM 내 선호하는 편집기입니다, 내가 프로젝트를 열 때, 나는 일반적으로 F10 키에 매핑을 통해 ctags를 목록을 구축 :

map <F10> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> 

이 나에게의 정의로 이동 할 수 있습니다 변수/구조체/etc를 입력하고 CTRL + 을 누르거나 OmniCppComplete를 통해 드롭 다운 목록으로 코드 완성을 사용합니다.

그러나 지금은 많은 구조를 사용하는 약간 더 큰 프로젝트를 진행하고 있습니다. 게다가, 많은 구조체는 다른 커스텀 구조체의 배열을 멤버로 가지고 있으므로, 코드 완성은 지금 당장은 매우 유용하고 중요한 도구입니다.

나는 .C 개의 파일과 .h 개의 파일을 포함하는 두 개의 경로를 가지고 있으며이 경로는 컴퓨터마다 다를 수 있습니다.

SDK_SRC_PLUS_HEADERS=/public/sdk 
THIRD_PARTY_SDK=/private/sdk 

내가 자동으로 VIM이 내가 시도 할 때 이러한 추가 경로의 내용을 참조 할 수 있도록하고 싶습니다 : 각 시스템에서, 그러나, 우리는 지금처럼 가리키는 우리 .bashrc 파일에 환경 변수가 VIM에 내장 된 OmniCppComplete 기능을 통해 코드 완성을하거나 CTRL + 을 VIM에 사용하면이 위치의 파일로 이동하여 구조체, 함수, 변수 등의 정의로 건너 뛸 수 있습니다.

위의 두 경로 모두에 대해 I cd을 입력하고 e 태그를 통해 ctags -R. 그런 다음, 정말 같은 추가 태그 경로를 포함하도록 내 ~/.vimrc 파일을 수정 :

tags=./tags 
tags+=$SDK_SRC_PLUS_HEADERS/tags 
tags+=$THIRD_PARTY_SDK/tags 

그때 cd/home/user1/projects/test에서 내 프로젝트에, VIM을 시작, 인덱스 그것을 VIM에 F10을했다. 그러나 이것은 전혀 작동하지 않습니다. 사실, 그것은 프로젝트 자체에 대해서만 태그를 사용하는 능력을 상실합니다 (즉, CTRL + )은 아무 것도하지 않습니다.)

누구나 환경 변수를 통해 여러 소스 디렉토리를 사용하여 코드 완성 소스 태그와 점프 - 투 - 정의를 가질 수있는 방법에 대한 제안 사항이 있습니까?

시간과 도움을 미리 보내 주셔서 감사합니다.

+2

음. 항상 저에게 효과적입니다. ': verbose set tags? '를 사용하여 태그의 가치를 확인 했습니까? – sehe

+0

@sehe 긍정. 위의 명령을 통해 결과를 확인한 결과는'tags =./tags, $ SDK_SRC_PLUS_HEADERS/tags, $ SDK_SRC_PLUS_HEADERS/tags'입니다. BASH 환경 변수 (즉, 어쩌면 내가 일종의 VIM 함수를 사용하여 환경 변수를 역 참조하고 절대 경로로 줄여야 할 필요가 있습니다.)과 같은 간단한 구문 일지 궁금합니다. – DevNull

+1

예, 확장되지 않은 경우 베타 만 지원됩니다 ~ – sehe

답변

1

실제로 태그 설정에서 환경 변수를 사용할 수없는 문제가있는 것 같습니다.

나는 해결 방법으로이 함께했다 :

:let &tags.=expand(",$SDK_SRC_PLUS_HEADERS/tags") 

이 약간 더 친절 있습니다

:exec expand("set tags+=$SDK_SRC_PLUS_HEADERS/tags") 
+1

흠,': help 'tags'는 말합니다 _ 환경 변수가 확장되었습니다 : | set_env | ._ –

+1

흠. 네. 네가 옳은 것처럼 보였다. 그러나 그것은 IIRC의 윈도우 박스에서 일어난 것이 아닙니다. 나는 그것을 검사했습니다. 나중에 다시 시도 할 수 있는지 여부를 확인합니다. – sehe

1

내가 @sehe가 제공하는 솔루션에 추가하고 싶었다.

이것은 내 .vimrc의 마지막 변경 집합입니다. 첫 번째 줄은 확장 된 환경 변수 경로를 내 tags 변수에 추가하기위한 것입니다. 다른 하나는 SDK를 업데이트해야하고 오래된 태그를 실수로 사용할 수 없도록하려는 경우 태그를 자동으로 업데이트하는 것입니다.

" CTAGS tag generation for OmniCppComplete 
set tags+=./tags 
exec expand("set tags+=$SDK_SRC_PLUS_HEADERS/tags") 
exec expand("set tags+=$THIRD_PARTY_SDK/tags") 
" Can verify taglist is correct via ":set verbose tags?" command 

" Create a mapping to delete the old tags, re-generate them, and use them 
map <F10> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . \| rm -f $SDK_SRC_PLUS_HEADERS/tags \| ctags -R -f $SDK_SRC_PLUS_HEADERS/tags $SDK_SRC_PLUS_HEADERS/tags \| rm -f $THIRD_PARTY_SDK/tags \| ctags -R -f $THIRD_PARTY_SDK/tags $THIRD_PARTY_SDK/tags \| echo "Done re-generating tags."<CR>