우리는 vim에서 제공하는 다양한 plugin들을 통해서 개발의 편의성 및 생산성을 높일 수 있다. 본 포스트에서는 ctags, cscope, NERDTree, Taglist, SrcExpl, AutoComplPop의 설치 방법 및 기능에 대해서 간단히 알아본다.
- ctags : 다양한 프로그래밍 언어로 된 소스와 헤더 파일에서 보이는 이름의 인덱스 파일을 생성하는 도구로 소스코드 내에서 함수나 변수가 선언된 곳으로 이동 가능
- cscope : ctags의 부족한 기능을 보충해주는 도구로 변수 및 함수의 정의, 호출된 곳, 호풀하는 함수, 문자열 검색 등의 기능을 제공
- NERDTree : Vim을 열어놓은 상태에서 파일 시스템을 탐색하는 기능을 제공
- Taglist : 함수, 전역변수 리스트를 사이드바로 제공하는 ctags 기반의 툴
- SrcExpl : 커서가 가리키는 변수 및 함수에 대한 정의를 보여주는 ctags 기반의 툴
- AutoComplPop : 키워드 자동완성 기능으로 vim에서 Ctrl + P를 통해 자동완성
Installation
ctags, cscope 설치
ctags와 cscope 설치는 패키징 툴인 apt-get, yum을 통해서 설치를 한다.1
2$ apt-get install ctags cscope // for ubuntu
$ yum install ctags cscope // for centOS
NERDTree, Taglist, SrcExpl, AutoComplPop 설치
vim plugin을 쉽게 설치하기 위해서 먼저 vim plugin manager인 Vundle.vim을 설치한다. Vundle.vim을 설치하면 .vimrc 파일에 Plugin ‘plugin_name’ 형태로 원하는 플러그인을 기입후 vim에서 :PluginInstall 을 하여 vimrc에 추가한 플러그인을 설치할 수 있다.
1 | $ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim |
( https://github.com/dhkoo/DevEnv 내의 .vimrc 참고 )
위의 과정을 통해서 NERDTree, Taglist, SrcExpl, AutoComplPop 플러그인 설치가 완료되었다. 설치된 플러그인들은 vim의 ex모드(:)에서 NERDTree, Tlist, SrcExpl 를 입력하면 실행된다. AutoComplPop은 기본적으로 enable되어 있어 “ctrl + p” 를 사용하여 자동완성 기능을 사용할 수 있다.
Usage
ctags 설정 및 사용방법
1 | $ ctags -R // 인덱스를 생성하고 싶은 최상위 디렉터리에서 수행 |
vimrc에서 set tags를 설정하지 않는 경우, ctags -R을 통해 생성된 tags 파일이 위치한 경로가 아닌 다른 경로에서 파일을 열었을 때 ctags가 tags 파일을 참조하지 못하여 동작하지 않게 된다. 따라서 vimrc에 set tags를 설정해줌으로써 어느 경로에서도 tags를 참조할 수 있도록 해준다. 다른 방법으로는 ex모드(:)에서 “:set tags 경로” 를 통해 임시적으로 설정해 줄 수 있다.
1 | :tj 함수명 or 구조체명 |
cscope 설정 및 사용방법
cscope을 사용하기 위해서는 몇가지 작업이 필요하다.
1 | $ vi mkcscope |
구체적인 사용방법은 다음과 같다.
$ cscope ( 전체화면으로 찾을 검색 가능 )
:cs find {query type} {symbol_name}
- 0 or s : symbol_name 중 검색 (Cntl-‘’ + s)
- 1 or g : symbol_name의 정의를 검색 (Cntl-‘’ + g)
- 2 or d : symbol_name에 해당하는 함수에서 호출된 함수를 검색 (Cntl-‘’ + d)
- 3 or c : symbol_name에 해당하는 함수를 호출하는 함수를 검색 (Cntl-‘’ + c)
- 4 or t : symbol_name에 해당하는 text문자열을 검색 (Cntl-‘’ + t)
- 6 or e : 확장 정규식을 사용하여 symbol_name을 검색 (Cntl-‘’ + e)
- 7 or f : 파일 이름중에서 symbol_name을 검색 (Cntl-‘’ + f)
- 8 or i : symbol_name을 include하는 파일을 검색 (Cntl-‘’ + i)
검색을 할때마다 ex모드로 :cs find {query type} {symbol_name}을 입력하는건 매우 번거롭기 때문에 매핑파일을 이용하여 쉽게 검색할 수 있다.
1 | $ wget http://cscope.sourceforge.net/cscope_maps.vim |
cscope_maps.vim을 다운받아 ~/vim/plugin에 넣어놓으면 원하는 변수 또는 함수에 커서를 놓고 “Ctrl + \ + {query type}“ 로 검색을 가능하게 해준다.
NERDTree 사용법
vim의 ex모드에서 :NERDTree 를 입력하면 왼편에 디렉터리 및 파일 뷰를 제공하는 사이드바가 생성된다. :NERDTree 를 검색할 때 대소문자 구분없이 그냥 ner까지 치고 tab 누르면 자동완성된다.
창 간의 이동은 vim prefix인 “Ctrl + w + 방향키” 로 가능하며, 사이드바 닫기는 사이드바로 이동 후 :q 또는 :NERDTreeToggle 을 통해서 닫을 수 있다.
Taglist 사용법
vim의 ex모드에서 :Tlist 를 입력하면 왼편에 전역변수와 함수 리스트를 보여주는 사이드바가 생성된다. 해당 창으로의 이동은 vim prefix (ctrl + w) + 방향키를 통해서 이동이 가능하며 사이드 바의 변수 또는 함수 리스트를 누르면 해당 위치로 이동되는 기능을 제공한다.
SrcExpl 사용법
vim의 ex모드에서 :SrcExpl 를 입력하면 하단에 창이하나 생긴다. 해당 창에서는 커서가 가리키는 변수 또는 함수의 정의를 보여준다. 아래 그림과 같이 SetupTests라는 함수에 커서를 놓으면 하단에 SetupTests라는 함수를 보여준다. 창의 이동은 vim prefix + 방향키이며 해당 창에서도 위아래로 움직이며 자유롭게 볼 수 있다.
ETC
Vim buffers
ctags를 통한 이동 또는 NERDTree를 통해서 여러 파일을 열었을 경우, vim에서는 해당 파일을 vim 내부 버퍼에 보관한다. 목록확인 및 버퍼에 있는 파일 이동 방법은 다음과 같다.
- :buffers - 버퍼에 있는 목록 확인
- :bnext - 다음 파일로 이동
- :bprevious - 이전 파일로 이동
마찬가지로 ex모드에서 매번 입력하는건 귀찮다.
우리는 “Ctrl + 6 또는 ^” 를 사용하여 버퍼내의 파일간 이동을 하자.