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가지 방법이 주로 쓰는 방법입니다.

2008년 10월 23일 목요일

2008년 7월 20일 일요일

12Monkey를 보고


<키산드라 예지 >

원래 과거는 1996년 우발적으로 바이러스를 퍼트리지만 주인공이 과거로 감으로써 과거 또한 변하고 있음.

큰 줄기는 변하지 않으나 잔잔한 가지들은 변함..

주인공이 1996년에 세균에 의해 인구 대부분이 죽는다는 것을 말한 것이 예지가 되어버리고 원래는 범인이 아니지만 나중에 범인이 되는 놈이 1996년에 범행을 저리르는 계기가 됨 .

  • 영화상의 브래드 피느가 경고론자들의 경고를 무시한다고 하고 자기가 그일을 하게 되는 것은 운명이라 믿음


정체를 알수 없는 미지의 목소리 ( 3번 나옴 )

처음에 병원에서 도망칠 때, 그리고 경찰에 쫓기며 물장구 칠 때 , 마지막으로 공항에서

  • 자신의 내부의 목소리일 수도 있고 ( 상상이 만들어내는 것이라고 살짝 암시를 주기도 함 )
  • 정말 신이 있어서 주인공을 다시 과거로 보내려는 초월적인 존재일 수도 있음

    (니가 진정으로 원하는 것이 무엇인지 일깨워 과거로 돌아가도록 설득함 )


여자의 전화로 인해 보안등급이 올라가고 12monkeys가 바이러스에 접근을 못하다고 볼 수 있나?

그래서 범인이 바뀐 걸까 ?


운전사를 포함하더라도 12명이 안됨. 바이러스를 퍼트릴 놈이 여기 멤버일까 ?

사실 12monkey와 바이러스를 퍼트리는 놈과 사고 전제가 틀리다고 볼수도 있다.

12monkeys는 단지 억압받는 동물들의 해방이라면

바이러스를 퍼트리는 놈은 모든 인간이 당연히 죽어야 할 존재로 인식하고 있다.

연관성을 가질 수 있을까 ?


이 목소리의 주인공은 자기자신일까 신일까 ?


불쌍한 브루스윌리스

아마 미래의 과학자들은 주인공에게 총을 준 것은 그냥 죽어라고 준 것 같다. 브루스 윌리스도 체제에 순응을 하지 못한 것에 대한 과학자들의 분노라고 말하고 있다. 그렇지만 여자 땜시 그냥 끝까지 추적한다. 나같으면 이빨도 뺐으니 여자 친구 데리고 알래스카로 도망간다.

바이러스 퍼지는 경로도 이미 알고 있고(샌프란시스코, 어쩌구 저쩌구 ) 충분히 피할수 있을 법한데 …

자기가 역사를 바꿀 것이라고 믿었던 것이 컸다.

영화의 전제는 깨어지지 않았다. 사실 합리적인 과학자들이 미래를 바꾸려고 얼마나 과거로 사람들을 보냈겠나.. 그게 안되니까. 초기 바이러스 원형이라도 구해 오라고 시킨 것 같다.

데스터네이션이 떠오르네..