vim + ctags + cscope + taglist 연동하여 사용하기

From Evernote:

vim + ctags + cscope + taglist 연동하여 사용하기

0. 필요 도구

  • vim
  • ctags
  • cscope
  • taglist
1. 설치

1) ctags, cscope 설치
$ sudo apt-get install ctags cscope

2) taglist 설치
Step | 패키지 다운로드
또는 http://vim-taglist.sourceforge.net/ 사이트에서 최신 버전을 다운로드 한다.
Step | 플러그인 적용
다운로드한 파일을 ~/.vim 디렉토리에 복사한 후 압축 해제 한다. 만약, .vim 디렉토리가 없다면 직접 생성한다.
$ mkdir ~/.vim
$ unzip taglist.zip

3) 쉘 스크립트 만들기
ctags와 cscope 사용을 위한 DB 파일 생성을 쉽게 하기 위한 스크립트를 만든다.
$ vim mktrace.sh

다음 내용 추가

#!/bin/sh
rm -rf cscope.files cscope.files
rm -rf tags

find . \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.s' -o -name '*.S' -o -name '*.asm' \) -print > cscope.files
ctags -R

cscope -i cscope.files

 

 

 


 

4) .vimrc 설정

다음 내용을 ~/.vimrc 에 추가한다.

 

" cscope 설정
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb

if filereadable("./cscope.out")
cs add cscope.out
else
cs add /usr/src/linux/cscope.out
endif
set csverb

 

 

2. 사용법


 

1) ctags

vim 명령 모드에서 다음을 입력

  • ctrl + ] – 커서가 위치하고 있는 함수나 구조체의 정의로 이동
  • ctrl + t – 이전 위치로 돌아오기
  • ts [name] – name과 일치하는 태그 목록 출력
  • ta /[name] – name과 일치하는 태그 목록 출력
  • tj [name] – 목록이 한개인 경우 이동, 여러개인 경우 목록 출력
  • tn – 다음 태그로 이동 (tag next)
  • tp – 이전 태그로 이동 (tag previous)
  • tags – 이동한 태그 히스토리 목록 출력
:ts main 

vim 명령모드에서 ts main 을 입력한 경우 위와 같이 main 함수가 선언되거나 정의 된 곳을 찾아 갈 수 있다.

 


 

 

2) cscope 

vim 명령 모드에서 다음을 입력

  • :cs [명령]
    • – 명령
    • help : 도움말
      • 예제 : :cs help / :cs
    • add : 새 데이타 베이스 더하기
      • 사용법 : add file|dir [pre-path] [flags]
      • 예제 : :cs add ./cscope.out
    • show : 연결 보여주기
      • 사용법 : show
      • 예제 : :cs show
    • kill : 연결 끊기
      • 사용법 : kill # (#은 연결된 데이타베이스 번호로 show 를 통해 확인 가능)
      • 예제 : :cs kill 0
    • reset : 모든 연결 초기화
      • 사용법 : reset
      • 예제 : :cs reset
    • find : Query for a pattern
      • 사용법 : find c|d|e|f|g|i|s|t name
      • 0 또는 s C 심볼 검색
      • 1 또는 g 전역 선언만 검색
      • 2 또는 d 이 함수에 의해 호출되는 함수들 검색
      • 3 또는 c 이 함수를 호출하는 함수들 검색
      • 4 또는 t 텍스트 문자열을 검색
      • 5 또는 e 확장 정규식을 사용하여 검색
      • 7 또는 f 파일 이름을 검색
      • 8 또는 i 이 파일을 인클루드하는 파일 검색
      • 예제: :cs find s start_kernel
  • :cn 다음 태그
  • :cp 이전 태그
cscope 직접 실행
cscope DB가 존재하는 디렉토리에서 다음을 입력
$ cscope -d
다음과 같은 메뉴에서 입력을 할 수 있다.
  • Find this C symbol : ctags와 마찬가지로 C 심볼(변수, 함수, 매크로, 구조체)들을 찾는다.
  • Find this global definition : 전역 선언만 검색
  • Find functions called by this function : 이 함수에 의해 호출되는 함수를 검색
  • Find functions calling this function : 이 함수를 호출하는 함수를 검색
  • Find this text string : 텍스트 문자열을 검색
  • Change this text string : 문자열을 검색해서 변경
  • Find this egrep pattern : 정규식을 이용해서 소스코드 검색
  • Find this file : 특정이름을 포함한 파일을 모두 검색
  • Find files #including this file : 특정헤더를 포함시키는 모든 소스코드를 검색
프로그램에서 빠져나오고 싶으면 ctrl + d 입력, tab을 누르면 검색메뉴로 돌아갈 수 있다.

 


3) taglist 
vim 명령 모드에서 다음을 입력
:Tlist
위와 같이 창이 분리되고 왼쪽에 함수, 매크로 등의 목록이 나온다. ctrl + w + w 로 창간 이동이 가능하며 태그 리스트 창에서 특정 함수 명이나 매크로에 커서를 갖다 놓고 enter를 치면 해당 함수나 매크로가 선언되어 잇는 곳으로 이동 한다.
taglist 창을 닫기 위해선 taglist 창으로 이동 하여 vim 명령 모드에서 :q 를 입력한다.

3. 참고


 





Leave a Reply