vim tips : $HOME / ctags / :A

2009/08/02 02:57
vim의 환경변수중에 자주사용하는 환경변수로 $VIMRUNTIME과 $HOME 이 있다. 만일 $HOME이 정해지면 재미있는것들을 많이 할 수 있는데, 예를들면 ctags 파일이나 session 파일들을 한곳에 몰아둘 수 있다.

cygwin 터미널용 vim과 gvim win32 버전을 동시에 사용하고, vimrc파일을 공유할경우 - 내 경우는 win32 vimrc를 ~/.vimrc 파일로 심볼릭링크를 걸어서 공유한다 - $HOME 변수를 설정하는것이 조금 곤란하다. 왜냐하면 시그윈과 윈도우즈가 디렉토리를 다루는 방식이 상이하기 때문이다. 내 경우는 그래서 꼼수로 $VIMRUNTIME 변수를 이용해서 아예 그곳에 set_home.vim 파일을 따로 두어 각각읽어들이게 했다. 그래서 시그인용 vim은 /usr/share/vim/vim72/set_home.vim 을 읽고 (그곳에서 let $HOME="/cygdrive/c/Users/pok/Documents") gvim win32는 다른 set_home.vim을 읽어들인다.

(Language : perl)
source $VIMRUNTIME/set_home.vim
function MakeTags()
    let current_dir = getcwd()
    let filename = substitute( substitute(current_dir, "[*:*|*' '*]", "_", "g"), "[*\/*|*\\*]", "_", "g" )
    let filename = $HOME . '/workspace/ctags_cscope/' . filename . '.ctags'
    execute '!ctags -R -f ' . filename . ' "' . current_dir . '"'
    execute 'set tags+=' . filename
endfunction
function AddTags()
    let ctags_files = substitute(glob($HOME . '/workspace/ctags_cscope/*ctags'), "\n", ",", "g")
    execute 'set tags+=' . ctags_files
endfunction
call AddTags()
au VimEnter * :cd $HOME
let g:alternateSearchPath = 'sfr:../source,sfr:../src,sfr:../include,sfr:../inc,sfr:../,sfr:./include'

MakeTags라는 함수는 현재 작업하는 곳의 ctags 파일을 작업디렉토리에서 공백이나 :, /, \ 등의 문자를 _로 바꾸어 $HOME/workspace/ctags_cscope 디렉토리에 만들어저장하는 역할을 한다. AddTags라는 파일은, 처음에 vim을 로딩할때 만들어둔 ctags 파일들을 읽는 역할을 한다. 소스를 분석할 디렉토리에서 :call MakeTags()만 호출하면, ctrl+]등을 자유롭게 이용할수 있다.

소스분석에서 매우 자주사용하는 플러그인이 a.vim이라는 플러그인인데, ./include/a.h , ./a.cpp 이렇게 파일들이있다면 :A 커맨드가 원하는데로 되지 않는다. cpp와 h 파일이 a.vim이 기본으로 지원하는 SearchPath에 없어서 생긴 문제인데, g:alternateSearchPath를 변경하면 원하는 SearchPath를 추가할수 있다. 마지막에 있는 sfr:../,sfr:./include 가 위의 문제를 해결하기위해 기본 SearchPath에서 추가한 설정이다.

마지막으로, 현재 vim의 view나 설정들(열어놓은 파일들이나 버퍼의 현재 커서 줄)을 저장하는 방법이 있는데, session을 저장하는 방법이다. :mks 원하는이름.vim 이라고 하면 세션이 저장되고 부르려면 :source 원하는이름.vim, 덮어저장하련 :mks! 원하는이름.vim 이라고 하면 된다. 내경우에는 $HOME 디렉토리에 세션들을 모두 저장해놓고 있으며, vim을 시작하면 자동으로 cwd를 $HOME으로 변경시켜놓아서( au VimEnter * :cd $HOME ) :source 이름.vim을 하면 바로 저장해놓은 세션들을 읽어들인다.

멀티플랫폼/개발환경

Trackback Address:http://poksion.cafe24.com/poklog/trackback/126