Development Tip

Vim : ctag 설정이 어렵습니다.

yourdevel 2020. 12. 3. 20:41
반응형

Vim : ctag 설정이 어렵습니다. 하위 디렉터리의 소스가 프로젝트 루트의 태그 파일을 보지 못함


오늘 Vim에서 (풍성한) ctags를 설정하려고하는데 제대로 작동하는 데 어려움이 있습니다. 명령 줄에서 다음을 사용하여 내 ctags 파일을 생성합니다.

cd myproj
ctags -R

그러면 myproj 루트에 태그 파일이 저장됩니다. 그러나 Vim은 루트에있는 소스에서 작업 할 때만이 태그 파일에서 읽는 것처럼 보입니다. 더 깊은 디렉토리로 이동할 때를 사용하여 태그로 이동하려고 <C-]>하면 다음과 같은 결과가 나타납니다.

E433: No tags file
E426: tag not found: MyClassName

MyClassName이 태그 파일에 태그를 가지고 있음을 확인했습니다. Vim이 태그를 볼 수 없다는 것입니다. 누군가가 루트의 태그 파일을 참조하도록 Vim을 구성하는 방법을 설명해 주시겠습니까?

감사.


이것을 .vimrc파일에 추가set tags=tags;/

이것은 현재 폴더에서 태그 파일을 확인하고 루트 폴더까지 한 디렉토리 위로 계속 이동합니다.

따라서 프로젝트의 모든 하위 폴더에있을 수 있으며 태그 파일을 찾을 수 있습니다.


Vim에게 태그 파일을 찾을 위치를 알려주는 옵션이 있습니다.

다음 구성을 사용합니다.

" search first in current directory then file directory for tag file
set tags=tags,./tags

도움말에서 추출 :

태그 파일 이름이 "./"로 시작하면 '.' 현재 파일의 경로로 바뀝니다. 이렇게하면 현재 파일이있는 디렉토리에서 태그 파일을 사용할 수 있습니다 (현재 디렉토리에 관계없이). "./"사용의 개념은 현재 디렉토리 ( "tags,. / tags") 또는 현재 파일의 디렉토리 ( "./tags,tags")에서 먼저 검색되는 태그 파일을 정의 할 수 있다는 것입니다. .

예 : : set tags =. / tags, tags, / home / user / commontags

그리고 내 tags파일이 생성 된 최상위 프로젝트 디렉토리에 현재 작업 디렉토리를 유지 합니다.

를 사용 :pwd하고 :cd myproj(Vim 내부) 태그 파일이있는 디렉토리로 이동합니다.

:help tags-option태그 경로에 대한 자세한 내용은를 참조하십시오 .

문제는 아마도 잘못된 디렉토리에 있거나 tags옵션이 제대로 설정되지 않았기 때문일 것입니다 .


#!/bin/sh

FREEZE_NAME=/* Give some version number */

mkdir $HOME/ctags/$FREEZE_NAME

V1=/* Software Path */

find $V1 -name "*.h" | xargs /usr/local/bin/ctags -a -f $HOME/ctags/$FREEZE_NAME/h.tags

find $V1 -name "*.c" | xargs /usr/local/bin/ctags -a -f $HOME/ctags/$FREEZE_NAME/c.tags

cd $HOME/ctags/$FREEZE_NAME/

rm -f all.tags

cat c.tags h.tags >> all.tags

sort all.tags > temp.tags

mv temp.tags all.tags

rm -f c.tags h.tags 

위의 코드를 .sh 파일에 넣고 다음을 실행하십시오. 이렇게하면 확실히 태그가 생성됩니다.


모든 프로젝트에 대해 태그 파일을 생성하는 경우 특히 .vimrc다른 시스템에서 공유하는 경우이 패턴이 마음에들 수 있습니다.

let repohome=substitute($REPO_HOME, "\/", "\\\\/", "g")                         
let &tags=substitute(expand("%:p:h"), "\\(".repohome."/.\\{-}\/\\).*", "\\1tags", "")

You would then have to set the environment variable $REPO_HOME in your .bashrc to your main repo directory without the trailing space (e.g. /home/<yourusername>/repos) and it will automatically look for a tags file in each subdirectory of $REPO_HOME with a depth of 1, e.g. /home/<yourusername>/repos/myproj/tags.

참고URL : https://stackoverflow.com/questions/5017500/vim-difficulty-setting-up-ctags-source-in-subdirectories-dont-see-tags-file-i

반응형