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
.
'Development Tip' 카테고리의 다른 글
'드롭 다운 상태'와 '닫힌 상태'의 레이아웃이 다른 Android Spinner? (0) | 2020.12.03 |
---|---|
뷰의 요소를 반복하는 방법 (0) | 2020.12.03 |
null android를 반환하는 카메라 활동 (0) | 2020.12.03 |
간단한 PostgreSQL 삽입이 작동하지 않습니다. (0) | 2020.12.03 |
리틀 엔디안과 빅 엔디안을 확인하는 C 프로그램 (0) | 2020.12.03 |