'Software 관련/Utilities'에 해당되는 글 4건


원문출처: 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

신고
블로그 이미지

꽃중년

불만있으면 떠나라...


1. doxygen 설치 (v1.5.6)
 http://www.stack.nl/~dimitri/doxygen/download.html#latestsrc

2. graphivz 설치 (V1.28)
http://www.graphviz.org/Download..php

3. mscgen 압축 풀어 적당한 폴더로 이동 (V0.12)
http://www.mcternan.me.uk/mscgen/

4. doxywizard 실행
5. Wizard 버튼 눌러 대충 설정
6. Expert 버튼 눌러 DOT 탭으로 이동
7. DOT_PATH에 graphviz 경로 지정
8. MCSGEN_PATH에 mscgen 경로 설정
9. Save... 그리고 Start...
신고
블로그 이미지

꽃중년

불만있으면 떠나라...

"=============================================================================
" default (gvim v7.1)
"=============================================================================
set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin

set diffexpr=MyDiff()
function MyDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let eq = ''
  if $VIMRUNTIME =~ ' '
    if &sh =~ '\<cmd'
      let cmd = '""' . $VIMRUNTIME . '\diff"'
      let eq = '"'
    else
      let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
    endif
  else
    let cmd = $VIMRUNTIME . '\diff'
  endif
  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction

"=============================================================================
" set
"=============================================================================
set tabstop=4
set shiftwidth=4
"set expandtab "탭을 스페이스로 바꾸어줌

filetype on  " 파일의 종류를 자동으로 인식
syntax on "문법 색상 강조

"set backup  "백업 파일 만들기
set nobackup "백업 파일 생성하지 않음
"set nowrap "자동줄바꿈 사용 안함

set ruler "커서가 위치한 열과 행을 표시
set showmode "삽입모드, 명령모드, 블럭모드등의 현재 모드 표시
set ignorecase "검색시 대소문자 구별 하지 않음
set hlsearch "검색어 색상 강조
set autoindent "자동 들여쓰기 설정

"set guifont=굴림체:h12:cHANGEUL "폰트 설정
"set guifont=ProFontWindows:h12 "폰트 설정
set guifont=Bitstream_Vera_Sans_Mono:h10

set lines=65 columns=85 "창크기 설정
set title "제목표시줄에 파일명 표시

set cmdheight=2 "command line의 줄수를 지정한다.
set exrc "현재 디렉토리의 vimrc 파일을 실행할 수 있게...

set showmatch "괄호 닫기 할 때 열었던 괄호와 매칭 확인
set mousehide "타이핑시 마우스 커서 감추기
set visualbell "경고소리를 깜빡임으로 대치
"set history=50 "파일 편집 시 undo 할 수 있는 최대 회수 설정

"한영 입력 상태에 따라 커서 색깔을 다르게...
if has('multi_byte_ime')
 highlight Cursor guibg=black guifg=NONE
 highlight CursorIM guibg=blue guifg=NONE
endif

"set backupdir=%VIM/backup
"set dir=%VIM/tmp

set nu
set wmnu "Tab 자동 완성시 가능한 목록을 보여
colorscheme desert "colorscheme을 elfload로 세팅

"=============================================================================
" Tags
"=============================================================================
set tags=./tags,C:\Projects\DME\Software\TCU_V1\tags


"=============================================================================
" Key Mapping
"=============================================================================
map <F5> :20vs ./<CR>
map <F6> O

"Ctrl+e를 누르면 현재 오픈한 파일의 디렉토리에 대한 탐색기를 띄운다
map <C-e> :silent !explorer %:p:h:gs?\/?\\\\\\?<CR>

" Directory Explorer를 위한 키맵핑
":nnoremap <silent> <F5> :TagExplorer


신고
블로그 이미지

꽃중년

불만있으면 떠나라...

Tag gVim, gvimrc, vi, vim
출처: http://cafe.naver.com/devctrl.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=197


http://www.vim.org                 -> gvim64.exe (Version 6.4)
http://ctags.sourceforge.net    -> ec56w32.zip (Version 5.6)

1. GViM 설치
7.0이 아닌 6.4를 설치하는 이유는 창을 파일 익스플로러로 나누었을 때 다른 창에 새로운 파일의 내용을 표시할 수 있기 때문이다.

2. ctags.exe를 GViM이 설치된 곳인 C:\Program Files\Vim\vim64\에 복사

3. 환경변수 PATH 설정
[내 컴퓨터 -> 속성 -> 고급 -> 환경변수 -> 시스템 변수 -> Path - 편집]의 맨 끝에 GViM이 설치된 경로를 추가
예) ;C:\Program Files\Vim\vim64\

4. GViM 환경 설정
C:\Program Files\Vim\_vimrc 파일을 수정 (줄에서 "로 시작하면 이후부터 그 줄의 끝까지 주석으로 인식)

syntax on "언어에 따른 자동 문법, 구문 강조 기능 사용
filetype on "파일의 종류를 자동으로 인식
colorscheme torte "색상 테마 변경

set nocp "오리지널 VI와의 호환성을 없애고, VIM 만의 기능들을 쓸 수 있게 함. (compatible)
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 bs=2 "삽입 모드에서 백스페이스를 계속 허용 (backspace)
set hi=50 "명령어 기록을 남길 개수 지정 (history)
set bs=eol,start,indent "줄의 끝, 시작, 들여쓰기에서 백스페이스를 사용하면 이전 줄과 연결됨
set sm "(), {}에서 닫는 괄호를 입력할 때 일치하는 괄호를 보여줌 (showmatch)


다음 라인들은 필요시 선택적으로 추가
set nobackup "백업 파일을 생성하지 않음

set title "타이틀 바에 현재 편집 중인 파일 표시
set expandtab "탭 문자를 공백 문자로 변환
set incsearch "키워드 전진 검색 사용
set background=dark "어두누 배경색 사용, 터미널 모드에서는 영향 없음
set ignorecase "검색, 편집, 친환시에 대소문자 구분하지 않음
set textwidth=76 "76번째 칸을 넘어가면 자동으로 줄 바꿈
set nowrapscan "찾기에서 파일의 맨 끝에 이르면 계속하여 찾지 않음
set nowrap "줄을 Wrap 하지 않음
set backupdir=C:\Backup "백업 파일을 저장할 디렉토리를 설정
set sol "여러 가지 이동 동작시 줄의 시작으로 자동 이동
set ch=1 "맨 아래 보이는 명령줄의 높이를 설정, 기본 값은 1
set sel=exclusive "비주얼 모드에서의 동작 설정
set scs "똑똑한 대소문자 구별 기능 사용
set sts=0
set nows "검색시 파일 끝에서 처음으로 되돌리기 안함

set enc=cp949 "인코딩을 설정, cp949, euc-kr ... (encoding)
set fenc=utf-8
set fenc=unicode
set exrc

"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라는 파일 생성
    - vi.bat를 실행할 때 마다 매 번 tags 파일 갱신
    - 소스의 내용이 변경되지 않는다면  ① 번 라인을 제거
    - 소스의 내용이 변경되어 tags 파일을 갱신하고자 할 때 GViM에서 [도구 - 꼬리표 만들기]로 tags 파일을 새로 생성
② 소스의 루트 디렉토리에 Session.vim 파일을 읽음
    - Session.vim 파일은 GViM의 분할된 화면 상태 등을 저장하고 있음
    - GViM에서 [창 - 파일 익스플러로 나누기], [창 - #으로 나누기], [창 - 세로로 나누기] 등으로 화면을 분할한 후 세션을 저장

6. VI에서 ctags 활용
현재 cursor를 찾고 싶은 keyword에 놓은 상태에서
g] : 키워드의 정의 목록 확인
g^] : 키워드의 정의 목록이 둘 이상이면 보여주고 한 곳이면 바로 이동
^] : 키워드가 정의된 곳으로 이동
^T : 정의된 곳으로 갔다가 다시 돌아옴
[i : 함수 및 변수의 원형 확인

현재 cursor 위치와 상관없이
:tj keyword
:ta keyword

같은 keyword가 여러 곳에서 선언된 경우에는 "tag 1 of 2 or more"와 같은 메시지가 보인다.
그 keyword 위에서 g]를 입력하면 GViM은 tag list를 나열한 후 선택할 수 있도록 해 준다.
:tn Next tag search
:tp Previous tag search

7. 태그 파일 위치 지정
여러 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 ..]

리눅스에서 모든 .c와 .h파일에 대해 tag 생성
# ctags *.[ch]

# cd /usr/src/linux-2.4.18-3/include/linux
# find . -name '*.[chCH]' -print | ctags -R -L-

# cd /usr/include
# find . -name '*.[chCH]' -print | ctags -R -L-

set tags=./tags,tags,../tags,/usr/tags   " 자신의 디렉토리 및 상위 디렉토리 경로
set tags+=/usr/src/linux-2.4.18-3/include/linux/tags    " kernel의 경로 추가
set tags+=/usr/include/tags    " include 의 경로 추가
신고
블로그 이미지

꽃중년

불만있으면 떠나라...

Tag ctags, editor, gVim

티스토리 툴바