문제

나는 주로 VIM / GVIM을 편집자로 사용하고 있으며 LXR (Linux Cross Reference) 그리고 어느 쪽이든 CSCOPE 또는 ctags 커널 소스를 탐색합니다. 그러나 나는 어느 쪽도 사용하지 않았습니다 CSCOPE 또는 ctags 그리고 기본 편집기로 VIM을 사용하는 것을 고려하여 다른 하나를 선택할 수있는 이유를 듣고 싶습니다.

도움이 되었습니까?

해결책

CTAGS는 기능 호출에서 정의로 점프 할 수있는 두 가지 기능을 활성화합니다. 첫 번째는 메소드에 대한 호출을 할 때 타격을 의미합니다. g] 또는 CTRL-] 해당 방법이 정의되거나 구현되는 곳으로 이동합니다. 두 번째 기능은 입력 할 때를 의미합니다 foo. 또는 foo->, Foo가 구조 인 경우 필드 완료된 팝업 메뉴가 표시됩니다.

CSCOPE에는 또한 첫 번째 기능 (사용)이 있습니다 set cscopetag - 그러나 마지막은 아닙니다. 그러나 CSCOPE는 기능이 호출되는 장소로 점프 할 수있는 기능을 추가로 추가합니다.

따라서 코드 기반을 뛰어 넘는 한 CTAG는 기능이 구현되는 곳으로 만 연결되는 반면 CSCOPE는 기능이 호출되는 위치를 보여줄 수 있습니다.

왜 하나를 선택 하시겠습니까? 글쎄, 나는 둘 다 사용한다. CTAGS는 설정하기가 더 쉽고, 달리기가 더 빠르며, 한 가지 방법으로 점프하는 데 도움이되면 줄이 적습니다. 당신은 그냥 달릴 수 있습니다 :!ctags -R . 그리고 g] 그냥 작동합니다. 또한 Omni 완전한 것을 가능하게합니다.

CSCOPE는 더 크고 알려지지 않은 코드베이스에 적합합니다. CSCOPE에는 파일 이름 목록이 포함 된 파일이 필요하기 때문에 설정은 통증입니다. 또한 VIM에서는 기본적으로 키 바인딩 설정이 없습니다. 실행해야합니다. :cscope blah blah 수동으로.

주먹 문제를 해결하기 위해 Bash 스크립트가 있습니다. cscope_gen.sh 다음과 같이 보입니다.

#!/bin/sh
find . -name '*.py' \
-o -name '*.java' \
-o -iname '*.[CH]' \
-o -name '*.cpp' \
-o -name '*.cc' \
-o -name '*.hpp'  \
> cscope.files

# -b: just build
# -q: create inverted index
cscope -b -q

관심있는 코드를 검색하고 CSCOPE.FILES 목록을 작성하고 데이터베이스를 만듭니다. 그렇게하면 모든 설정 단계를 기억하지 않고 ":! cscope_gen.sh"를 실행할 수 있습니다.

이 스 니펫으로 CSCOPE 검색을 CTRL 공간 X 2에 매핑하여 CSCOPE의 다른 다운 너를 완화시킵니다.

nmap <C-@><C-@> :cs find s <C-R>=expand("<cword>")<CR><CR>

거기 있습니다 이 cscope_maps.vim 플러그인 그것은 비슷한 바인딩을 설정합니다. 나는 모든 옵션이 무엇을 의미하는지 기억할 수 없으므로 Ctrl 공간을 고수하는 경향이 있습니다.

결론적으로 : CTAG는 설정하기가 더 쉽고 대부분 다른 일을하지 않고도 대부분 작동합니다. CSCOPE는 크고 대부분 알려지지 않은 코드베이스를 유지해야하지만 더 많은 다리 작업이 필요하다면 더 많은 기능을 제공합니다.

다른 팁

나는 몇 달 전에 같은 상황에 있었다 ...

CTAG의 정밀도가 부족한 것은 A의 통증입니다.

사용법에 관해서는, 그것은 실제로 간단합니다 ... 당신은 커널의 루트에 cscope -r를 입력하고 당신은 걱정할 것이 없습니다.

그런 다음 주요 바인딩은 모두 Ctrl- 를 기반으로합니다 (CTRL에 알레르기가있는 경우 다시 맵핑 할 수 있습니다). 주로 S와 G ....,

커널을 위해 개발하면 완료가 너무 많이 필요하지 않았습니다 ....

어쨌든, CSCOPE로 가십시오. 이것은 훨씬 더 편리하고 정확합니다.

흠 ... 아마도 ctags 대신에 태그를 사용해야 할 것입니다 ...

CSCOPE를 사용하는 경우,이 기능을 호출하는 사람 과이 기능을 호출하는 기능을 볼 수 있습니까?

Etags / Ctags를 사용하여 이것이 수행 할 수 있는지 확실하지 않습니다 ...

그것은 단 하나의 기능 일뿐입니다 ... 특정 함수 정의가 포함 된 파일을 찾는 것은 어떻습니까? 이것은 CSCOPE에서만 얻습니다.

나는 사용한다 둘 다 CSCOPE 및 ETAGS는 특히 Linux 커널과 같은 대형 코드베이스로 작업 할 때 다른 것들에 적합합니다. 사실, 나는 Linux 커널 / Xen에서 작업하기 시작할 때 CSCOPE와 ETAGS를 사용하기 시작했습니다.

LXR은 클릭하고 네트워크 등을 넘어 가야하기 때문에 크지 않습니다. 반면 커널 코드 및 CSCOPE 및 태그 데이터베이스를 빌드 할 수 있습니다. 네트워크를 넘어갈 필요가 없습니다 (LXR과 달리).

글로벌 GTAG를 사용하십시오. VIM 플러그인을 사용할 수 있습니다 gen_tags GTAG를 VIM과 통합합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top