2008년 11월 4일 화요일

vim 자동 완성

원문출처:
 http://monac.egloos.com/1936134


autocomplpop.vim : Automatically open the popup menu for completion
http://www.vim.org/scripts/script.php?script_id=1879

2007년 5월에 등장한 플러그인입니다.
autocomplpop.vim 파일을 자신의 홈 ~/.vim/plugin 디렉터리에 복사합니다. 그러면 끝입니다.

C 언어를 쓰거나, 파이썬을 쓰거나, 루비를 쓰거나 잘 동작합니다. 루비라면 apt-get install vim-ruby를 설치하면 잘 동작합니다.

엔터키를 입력하면 완성되지만 비주얼 스튜디오를 쓰던 손맛이 있어서 탭키가 익숙합니다. 그래서 ~/.vimrc에 다음을 추가합니다.

function! InsertTabWrapper()
  let col = col('.') - 1
  if !col || getline('.')[col-1]!~'\k'
    return "\<TAB>"
  else
    if pumvisible()
      return "\<C-N>"
    else
      return "\<C-N>\<C-P>"
    end
  endif
endfunction
inoremap <tab> <c-r>=InsertTabWrapper()<cr>

이 스크립트는 http://blog.blueblack.net/item_164에서 가져왔습니다. ^^;

그런데 조금 문제가 있습니다. 엔터키를 입력해도 항상 코드가 자동 완성됩니다. printf가 아니라 print만 입력하고 싶어도 자꾸 printf만 되죠. 그래서 위 코드를 다시 아래처럼 바꿉니다.

function! InsertTabWrapper()
  let col = col('.') - 1
  if !col || getline('.')[col-1]!~'\k'
    return "\<TAB>"
  else
    if pumvisible()
      return "\<C-P>"
    else
      return "\<C-N>\<C-P>"
    end
  endif
endfunction

inoremap <tab> <c-r>=InsertTabWrapper()<cr>
inoremap <expr> <CR> pumvisible() ? "<C-Y><CR>" : "<CR>"

이렇게하면 코드 완성은 탭키로만하고 엔터키를 누르면 자동 완성은 하지 않고 줄바꿈을 할 수 있습니다.

이 플러그인은 현재까지 다운로드 수가 3257밖에 안 되었습니다. 이런 건 좀 널리 써줘야 해요~

팝업창의 색상 설정은 .vimrc에 다음과 같이 하면 됩니다.

hi Pmenu guibg=#666666
hi PmenuSel guibg=#8cd0d3 guifg=#666666
hi PmenuSbar guibg=#333333

autocomplpop.vim
taglist.vim

taglist 설정

출처
http://withover.com/blog/271?TSSESSIONwithovercomblog=2d4636316b3f6e581c606aee730e9506#recentTrackbacks

설치방법

1. ctags 를 설치한다.

# yum install ctags

2. 아래의 주소에서 taglistxx.zip을 다운받는다

http://vim.sourceforge.net/scripts/script.php?script_id=273 

3. taglistxx.zip의 압축을 풀면, 두 개의 파일(taglist.txt, taglist.vim)이 나오는데 폴더에 각각 복사를 한다.
.vim폴더가 없을 경우 mkdir .vim 으로 생성한다. ( 계정명 withover )

( .vim 폴더가 없을 경우 )
$ mkdir .vim
$ mkdir .vim/doc
$ mkdir .vim/plugin

( 복사되어야 할 파일과 위치 )
/home/withover/.vim/doc/taglist.txt
/home/withover/.vim/plugin/taglist.vim

4. doc 디렉토리로 이동 → vim 실행 → :helptags . 입력

$ cd /home/withover/.vim/doc/
$ vim
( vim 환경에서 )
:helptags .

5. vi 환경에서 :TlistToggle 을 입력하면 코글창을 켜고 끌 수 있다.

주의 - FreeBSD 를 이용하고 있는 경우라면, .vimrc에 아래 설정을 추가한다.

let Tlist_Ctags_Cmd = "/usr/local/bin/exctags"

옵션 .vimrc에 추가

let Tlist_Use_Right_Window = 1   “분할 창을 오른쪽에 배치”
let Tlist_Inc_Winwidth = 0           “콘솔창에서 vim 사용하기”
let Tlist_Auto_Open = 1              "vi 실행시 TagList 자동실행"

다양한 vim 플러그인

http://www.vim.org/scripts/script_search_results.php?keywords=&script_type=&order_by=rating&direction=descending&search=search


ctag 설정


먼저 서두에 제가 작성한 글이 아님을 밝힙니다.
여기서 따옴
http://4ellene.net/tt/1198

사용하기
        
=====================================================
현재 커널 분석이 필요없으므로 일단 패스
ubuntu에서는 커널 upgrade시 /usr/src/kernel folder 이름이 바뀌므로
자칫하다가는 dummy 값을 symbolic link 해줄까봐 나중에 필요할 때 추가해야 겠음

    = > 우선 커널이 있는 폴더로 이동 합니다
           $cd /usr/src/linux/ <== ( 전 linux로 심볼릭 링크가 돼어 있습니다 안돼어 있다면
           심볼릭 링크를 만드셔도 돼고 직접 경로를 다 입력 하셔도 상관없습니다)
           심볼릭 링크 만들기 -> ln -s  /usr/src/커널폴더명 linux
           커널 폴더로 이동했으면 ctags -R 을 입력하여 tags 파일을 생성합니다
           시간이 좀 걸리는데 ls로  tags 파일이 생성 된걸 확인 합니다



<extra 기능 >

ex 모드 -> vi 에서 : 을 눌러서 명령을 입력 하는 모드를 말합니다
ex 모드에서 :tj 함수명 이나 구조체명 (왜 tj 인가 ?  tags jump 약어)
(찾고자 하는 함수명이나 구조체 이름등을 입력 하면 관력 이름 함수나 구조제..정보가 나타 납니다 )
보통 한두가개 아닌경우 스페이스바를 누르면 목록이 더나오며 d 를 누를 경우 한페이지씩..
보여 줍니다 나갈때는 q로 나갈수 있습니다 그럼 <CR> 이 나오는데 여기서 찾은 함수나 구조체
번호를 입력 하면 자동으로 점프합니다

다른 방법으로 가는 방법은 커널 소스를 vi열어서 분석하다가 함수 원형이나 구조체 이름에서
ctrl + ] 를 누르면 자동으로 태그를 찾아 갑니다
이전으로 다시 돌아 올때는 ctrl + t 를 사용 해서 돌아 올수 있습니다

ex모드 : sts 함수명 , 구조체명
위에서 설명한 tj와 비슷 하지만 한가지 다른점이 수평창분활을 해서 결과를 보여 줍니다

이외 명령이 더 있지만 실제 이거만 알아도 충분 합니다 나머지 이전으로 돌아가기 이런건..
거의 실제 사용 되지도 않습니다 위에 설명한 4가지 방법이 주로 쓰는 방법입니다.