2005. 9. 26. 11:29

Gvim Ctags

OldPapers/linux 2005. 9. 26. 11:29
GVIM 및 CTAG 활용



Download files

http://vim.sourceforge.net        ->   gvim63.exe    

http://ctags.sourceforge.net    ->   ec554w32.zip



윈도우용 VI(GVIM)

1. gvim63.exe(Ver. 6.3)를 설치합니다. (native language를 지원해서 한글로 메뉴가 나옵니다)



2. ctags.exe(Ver. 5.5.4)를 gvim이 설치된 곳인 C:\Program Files\Vim\vim63\에 복사합니다.



3. 환경변수 PATH 설정

[내 컴퓨터 -> 속성 -> 고급 -> 환경변수 -> 시스템 변수 -> Path - 편집]에서 맨 끝에 gvim을 설치한 곳을 추가합니다.

    예) ;C:\Program Files\Vim\vim63\

4. gvim 환경 설정


C:\Program Files\Vim\_vimrc 파일을 수정하면 기본 설정을 변경할 수 있습니다.

파일의 맨 앞줄을 "로 시작하면 주석 줄로 인식합니다. (C/C++ 의 '//' 혹은 기타 쉘의 '#')



다음의 라인을 추가합니다.

set nocp "오리지널 VI와의 호환성을 없애고, VIM 만의 기능들을 쓸 수 있게 함. (compatible)

syntax on "언어에 따른 자동 문법, 구문의 색을 다르게 표시.

filetype on "파일의 종류를 자동으로 인식.
colorscheme torte "컬러스킴을 변경.

set ru "화면 우측 하단에 현재 커서의 위치(줄, 칸)를 표시. (ruler)

set sc "완성중인 명령을 표시.

set nu "라인 번호를 표시.

set vb "키를 잘못눌렀을 때 삑 소리를 내는 대신 번쩍임. (visualbell)
set hls "검색된 스트링의 하이라이트. (hlsearch)

set ci "C 형태의 들여쓰기. (cindent)
set ai "자동 들여쓰기. (autoindent)
set si "좀더 똑똑한 들여쓰기. (smartindent)

set sw=4 "자동들여쓰기를 4칸으로 설정. (shift width)

set ts=4 "tab 간격을 4칸으로 설정. (tab stop)



다음의 라인은 필요시에만 추가합니다.

set backupdir=C:\Backup "백업 파일을 저장할 디렉토리를 설정.

set bs=indent,eol,start "백스페이스 사용.

set sol "여러가지 이동 동작시 줄의 시작으로 자동 이동.

set ch=1 "맨 아래 보이는 명령줄의 높이를 설정, 기본 값은 1
set km=startsel,stopsel "SHIFT 키로 선택 영역을 만드는 것을 허용.

set sel=exclusive "비주얼 모드에서의 동작 설정.

set scs "똑똑한 대소문자 구별 기능 사용.

set hi=50 "명령어 기록을 남길 개수 지정. (history)

set sts=0

set nows "검색시 파일 끝에서 처음으로 되돌리기 안함.
set noet "탭 -> 공백 변환 기능 사용안함.

set sm "가로 닫기 괄호를 사용할 때 일치하는 가로 열기 괄호를 보여줌.

set nobackup "백업 파일을 만들지 않음.
set encoding=cp949 "인코딩을 설정

set fenc=utf-8

set fenc=unicode



"GUI 이면, 시작시 크기 설정

if has("gui_running")

    set lines=89

    set co=114

endif



5. 분석할 소스의 tags 파일 생성

분석할 소스 트리의 루트로 이동합니다.

예) test_src 소스를 c:\test_src>에 풀어 놨다고 가정합니다.

소스의 루트 디렉토리에 vi.bat 파일을 만들고 메모장으로 열어서 다음과 같이 입력합니다.



ctags -R . ------------------------- ① -R과 .(dot)를 사이에 스페이스가 있습니다.
gvim -S Session.vim ---------------- ②



① 소스의 루트 디렉토리에 tags 라는 파일이 생성됩니다.

    1. vi.bat를 실행할 때마다 매번 tags 파일이 갱신됩니다.

    2. 소스의 내용이 변경되지 않는다면  ① 번 라인을 제거합니다.

    3. 소스의 내용이 방대할 경우 tags 파일을 만드는 데 오랜 시간이 걸리므로 ① 번 라인을 제거하고

         tags 파일을 갱신하고자 할 때 gvim에서 [도구 - 꼬리표 만들기]로 tags 파일을 만들어 줍니다.
② 소스의 루트 디렉토리에 Session.vim 파일이 존재할 경우 읽어옵니다.

    1. Session.vim 파일은 vi의 분할된 화면 상태를 저장합니다.

    2. gvim에서 [창 - 파일 익스플러로 나누기], [창 - #으로 나누기], [창 - 세로로 나누기] 등으로 화면을 분할한 후

        세션을 저장하면 Session.vim 파일이 생성됩니다.



VI에서 ctags 활용

^](ctrl + ]) 또는 g^] 다른 파일에 속한 단어의 정의 부분으로 찾아갑니다.
^T(ctrl + t) 다른 파일에서 다시 돌아옵니다.

[i 함수 프로토타입 확인합니다.



찾고 싶은 keyword를 현재 cursor 위치에 놓을 수 없는 경우

:tj keyword

:ta keyword




같은 keyword에 대해 여러곳에서 선언된 경우에는

tag 1 of 2 or more 과 같은 메시지가 뜨는 것을볼 수 있습니다.

이것은 해당 keyword에 대한 tag가 여러개 있다는 의미입니다.

그 keyword 위에서 g]를 입력하면 VIM은 tag list를 나열한 후 선택할 수 있도록 해 줍니다.

:tn Next tag search

:tp Previous tag search




태그파일 위치지정

여러 tag 파일들을 동시에 참조를 할 수 있으며 keyword를 아래 tags 파일에서 순서대로 search합니다.



set tags=./tags,../tags,../include/tags,/usr/include/tags


작업할 directory에 _vimrc 파일을 만들어 위의 line을 넣고 vim을 실행시키면 home의 _vimrc를 읽은 후에 현재 directory의 _vimrc를 읽게 됩니다. 만약 vim이 현재 directory의 _vimrc를 읽지 않는것 같다면 :set all 하셔서 noexrc가 설정되어 있는 지 확인해 보시기 바랍니다. exrc이어야 local디렉토리의 _vimrc를 읽습니다. 만일 noexrc라면 C:\Vim/_vimrc에 set exrc 를 넣어놓으면됩니다.



좀더 자세한 사항을 알고 싶으면?

:help tags
:help g]
:help :tjump
:help :sts
:help :tn

반드시 :help tags를 해서 대충이라도 읽어보시기 바랍니다. 많은 유용한 명령들이 있습니다.



같은 단어 반복 찾기

커서위에 있는 같은 단어를 찾아 이동합니다.
* 아래로 갈 때

# 위로 갈 때는



gd를 누르면 열려있는 file에서 커서위의 단어가 정의되어 있는지 확인하여 있으면 가고 없으면 현재 자리에서 선택된 대로 있습니다. 그 상태에서 n을 누르면 아래로 이동하고 N을 누르면 위로 이동합니다. 그리고 gd를 눌러서 해당 단어의 선언이나 정의만 보고 다시 제자리로 오고 싶으면 '(엔터옆 따옴표)를 두 번 누르면됩니다.



파일이 탭으로 작성되었는지 확인 하기

:set list





중복된 여러개 선언이 있을때 예를 들어서 i386/arm/mips/alpha 등 플랫폼에서 모두가 선언하였을때 tag이동은 올바로 가는 경우가 거의 없죠. 그럴때는 g + ctrl + ] 로 리스트를 뽑아서 이동하세요.





Usage: ctags [options] [file(s)]

-f <name> Write tags to specified file. Value of "-" writes tags to stdout ["tags"; or "TAGS" when -e supplied].

-h <list> Specify list of file extensions to be treated as include files. [".h.H.hh.hpp.hxx.h++"]

-R Equivalent to --recurse.



Usage: vim [arguments] [file ..]