본문 바로가기
Software Science

[Linux] gvim 환경 설정 하기

by 101Architect 2018. 4. 1.

" 이건 주석!

" vim:set ft=vim ts=4 sw=4 sts=4 sta ai bs=2: 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Configuration file for vim
" 기본 환경 설정
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 모든 옵션을 원래대로 복원
" 이걸 실행하면 &diff상태가 사라져 버린다.
"set all&

"gui_win32에 diff 모드로 open할 경우에 창을 최대화 한다.
"subversion의 diff 모드에서 사용하기위해서 설정했음.
"참고 : http://www.vim.org/tips/tip.php?tip_id=88
" all&이전에 있어야 이 옵션이 먹는다. all&옵션 이후에는 &diff가 사라짐.
if has("gui_win32") && &diff
 au GUIEnter * simalt ~x
endif

"diff모드일 경우에는 폴더를 열어서 표시.
"불편해서 안씀.
"if &diff
" set foldopen=all
"endif

"끝에 '~'가 붙은 backup파일을 생성하지 않도록 하는 옵션.
"특별히 backup 파일이 필요한 경우가 없었던 것 같다.
set nobackup
"현재 디렉토리의 .vimrc파일을 실행할 수 있게 하기위해 사용.
set exrc

" 명령어 기록을 남길 갯수 지정
set hi=100

"초기에 ShowMarker를 disalbe 시킨다.
"다시 활성화 하기위해서는 <leader>mt 를 하면 된다.
let g:showmarks_enable=0
set equalalways

"path를 설정한다.
if has("unix")
 set path=.,include,/usr/include,/usr/local/include,/usr/src/linux/include,,
else
 set path=.,include,c:/Progra~1/Micros~3/vc98/include,,
endif

"항상 파일을 읽어들일때 이전에 종료되었던 corsor 위치에서 시작하도록 한다.
"커서 위치 기억하는 방법중 다음과 같은 방법도 있다.
"------------------------------------------------------------------------
"set viewoptions=cursor
"au BufWinLeave *.c,*.cc,*.h,*.html,*.php,Makefile,*.mak mkview
"au BufWinEnter *.c,*.cc,*.h,*.html,*.php,Makefile.*.mak silent loadview
"------------------------------------------------------------------------
if has("autocmd")
 " When editing a file, always jump to the last cursor position
 autocmd BufReadPost *
  \ if line("'\"") > 0 && line ("'\"") <= line("$") |
  \ exe "normal g'\"" |
  \ endif
endif

"입력모드로 들어갈때 영문으로 시작하게 하는 setting.
set iminsert=0

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 화면 설정
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Color Scheme 설정.
if has("unix")
 if has("gui_running")
  colorscheme koehler
 else
  colorscheme ron
 endif
else
 if has("gui_running")
  colorscheme northsky
  "colorscheme af
 else
  colorscheme ron
 endif
endif

"현재 커서의 라인 표시하기
"set cursorline

"unix일 경우에 gui 폰트를 설정한다.
if has("unix") && has("gui_running")
" if $LANG[0] == 'k' && $LANG[1] == 'o'
"  set guifont=gulimche
"  "set guifontset=-*-clean-medium-r-normal-*-16-*-*-*-*-*-*-*,
"  "set guifontset+=-*-screen-medium-r-normal-*-16-*-*-*-*-*-*-*,
"  "set guifontset+=-*-*-medium-r-normal-*-16-*-*-*-*-*-*-*,
"  "set guifontset+=-*-gulimche-medium-r-normal-*-*-90-*-*-p-*-iso8859-1,
"  "set guifontset+=-*-gulimche-medium-r-normal-*-*-90-*-*-c-*-ksc5601.1987-0,
"  "set guifontset+=*
" else
"  set guifont=-*-clean-medium-r-normal--16-*-*-*-*-*-*-*
" endif

 set lines=50
endif

" windows용 gui일때 lines을 설정한다.
if has("gui_win32")
" set guifont=굴림체:h10:cHANGEUL
 set guifont=Bitstream\ Vera\ Sans\ Mono:h10:cHANGEUL

 set lines=80
endif

"파일이름을 타이틀바에 넣는다.
set title

"입력모드에서 한글상태일때 커서의 색깔을 다르게 한다.
highlight Cursor guibg=Red guifg=Black ctermbg=Red ctermfg=Black
highlight CursorIM guibg=Blue guifg=NONE ctermbg=Blue ctermfg=NONE

"gui용에서 각종 설정들. 예를 들면 T는 toolbar를 보여주는 옵션이다.
"g : Grey menu items
"r : 수직스크롤바
"T : Toolbar
"m : menu bar
"t : tearoff menu
"if has("unix")
" set guioptions=agimrLtT
"" set guioptions=grLt
"elseif has("gui_win32")
"" set guioptions=gmrLtT
" set guioptions=grLt
"endif
if has("gui_running")
" gVim 메뉴를 사용하지 않는다. 대부분의 명령보다 선행되어야 한다.
" let did_install_default_menus = 1
" let did_install_syntax_menu = 1
" let skip_syntax_sel_menu = 1
" 설정 방식이 바뀌었다.
 set go-=m
" 툴바를 보이지 않게 한다.
 set go-=T
" 스크롤바를 표시하지 않는다.
 set go-=l
 "set go-=L
 "set go-=r
 set go-=R
 set go-=b
" GUI 여서 마우스가 사용 가능하면...
" 마우스를 사용하지 않는다. (누르면 이동되는게 귀찮다!)
" set mouse=a
" set mouse=

" 마우스 모델을 popup 으로 함.
 set mousem=popup

" '간단한 선택' 다이얼로그가 새 창에서 뜨지 않도록...
 set go+=c

endif

" 시작시 전체화면으로 설정(좀 귀찮다 ^^)
if has("win32")
" au GUIEnter * simalt ~x
endif

"folding을 계속 유지하게 한다.
"set foldmethod=marker
"set fdc=3

" 추적 수준을 최대로
set report=0

" 항상 status 라인을 표시하도록 함.
set ls=2

" 줄 간격 설정
set lsp=1

" 홈 디렉토리가 존재할 때에만 사용할 수 있는 기능들
if exists("$HOME")
" 홈 디렉토리를 구한다.
" 특정 시스템에서는 홈 디렉토리 경로 끝에 / 또는 \ 문자가
" 붙어 있기 때문에, 그것들을 제거한다.
 let s:home_dir = $HOME
 let s:temp = strpart(s:home_dir,strlen(s:home_dir)-1,1)
 if s:temp == "/" || s:temp == "\\"
  let s:home_dir = strpart(s:home_dir,0,strlen(s:home_dir)-1)
 endif

" 경로 설정
if has("win32")
 let s:dir_tmp = s:home_dir."/_vim/tmp"
 let s:dir_backup = s:home_dir."/_vim/backup"
else
 let s:dir_tmp = s:home_dir."/.vim/tmp"
 let s:dir_backup = s:home_dir."/.vim/backup"
endif

" 임시 디렉토리 설정
 if isdirectory(s:dir_tmp)
  set swf
  let &dir = s:dir_tmp
 else
  set noswf
  set dir=.
 endif

" 백업 디렉토리 설정
 if isdirectory(s:dir_backup)
  set bk
  let &bdir = s:dir_backup
  set bex=.bak
 else
  set nobk
 endif

endif

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 파일 인코딩 설정
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 인코딩 설정
" 문서를 읽을 때 BOM 을 자동으로 제거하려면, fencs 맨 앞에 ucs-bom 를 추가.
"let &tenc=&enc
"set enc=utf-8
"set fileencoding=cp949
if has("unix")
 set fenc=cp949
 set fencs=cp949,utf-8,cp932,euc-jp,shift-jis,big5,ucs-2le,latin1
else
 set encoding=cp949
 set fileencodings=utf-8,cp949
 set langmenu=cp949
endif

"초기에 파일 포맷을 도스로 설정.
if has("unix")
 set fileformat=unix
else " has("gui_win32")
 set fileformat=dos
endif

" encoding을 설정함.
if has("unix")
 "리눅스 일 경우에는 utf-8을 기본으로 씀
 set termencoding=utf-8
else
 set encoding=korea
 set termencoding=euckr
endif

"http://bbs.kldp.org/viewtopic.php?t=46594
"다른 로케일의 파일을 열면, "변환되었습니다."라고 나온다.
"저장할 때 읽은 로케일로 저장된다.
" if v:lang =~ "^ko"
"  set encoding=cp949
"  set fileencodings=cp949,utf-8
"  set guifontset=-*-*-medium-r-normal--16-*-*-*-*-*-*-*
" elseif v:lang =~ "^ja_JP"
"  set fileencodings=euc-jp
"  set guifontset=-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*
" elseif v:lang =~ "^zh_CN"
"  set fileencodings=gb2312
"  set guifontset=*-r-*
" endif

" if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
"  set encoding=utf-8
"  set fileencodings=utf-8,cp949
" endif

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" filetype 기능 & Syntax Highlighting 기능
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"syntax를 켜 준다.
syntax on

" 파일의 종류를 자동으로 인식
filet plugin indent on

" 몇몇 커스텀 확장자들에게 파일 형식 설정
"au BufRead,BufNewFile *.dic setl ft=php
au BufRead,BufNewFile *.doku setl ft=doku
au BufRead,BufNewFile *.hlsl setl ft=fx
au BufRead,BufNewFile *.glsl setl ft=fx
au BufRead,BufNewFile *.cg  setl ft=fx
au BufRead,BufNewFile *.material setl ft=fx
au BufRead,BufNewFile *.as  setl ft=actionscript
au BufRead,BufNewFile *.js  set ft=javascript.jquery

" 파일 형식에 따른 Syntax Highlighting 기능을 켠다
sy enable

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 찾기 설정
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"검색시 찾은 단어를 highlight한다.
set hlsearch

"검색시 문서의 맨밑까지 찾으로 다시 위로 올라가지 않는다.
"set nowrapscan

" 검색시 대소문자를 구별하지 않음
"set ic

" 똑똑한 대소문자 구별 기능 사용
"set scs

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" indent 설정
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 자동 들여쓰기 사용 안함
"set noai

"auto indent 설정
set ai

" 똑똑한 들여쓰기 사용 안함
"set nosi
set si

" 내장된 indent 파일이 없어서 C indent 를 사용하는 경우
au FileType javascript,jsp setl cin

" 각 언어의 표준 indent 를 사용하는 경우
" 수동 추가하기가 귀찮아져서 결국 자동 인식으로 바꿨다.
"au FileType c,cpp,html,vim,java,sh,python,xml,perl,xf86conf,conf,apache
"\ if expand("<amatch>") != "" |
"\   if exists("b:did_indent") |
"\  unlet b:did_indent |
"\   endif |
"\ runtime! indent/<amatch>.vim |
"\ endif

 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 편집 기능 설정
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set nocompatible


" 커서의 위치를 항상 보이게 함.
set ru

" 완성중인 명령을 표시
set sc

" 줄 번호 표시 너비 설정
set nuw=5

"tab 관련 설정.
set ts=4 sw=4 sts=4 sta ai
"set ts=8 sw=4 sts=4 sta ai

" 탭 -> 공백 변환 기능 (사용 안함)
set noet
set sts=0

" 자동 줄바꿈 안함
"set nowrap

" 자동 줄바꿈
set wrap

"{[(,)]}를 넣을 때 매치되는 곳으로 갔다가 온다.
set matchtime=3
set showmatch

"마우스로 붙여넣기를 할 때 autoindent나 textwidth등이 작동해 버려서 원하지
"않는 들여쓰기가 되는 것을 막는 경우에 사용한다.
"붙여넣기 하기전에 :set paste, 붙여넣기 한후에 :set nopaste
"pastetoggle=로 설정하면 키를 누를때마다 이 상태가 toggle된다.
"set pt=<Ins>
set pastetoggle=<insert>

" 괄호짝 찾기 기능에 사용자 괄호 종류를 더한다.
set mps+=<:>

"command line의 줄수를 지정한다.
set cmdheight=1

" 입력이 중단된 후 얼마 후에 swap 파일을 쓸 것인지와
" CursorHold 이벤트의 대기시간을 설정 (milliseconds)
set ut=5000

" 몇 글자를 입력받으면 swap 파일을 쓸 것인지 설정
set uc=100


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 단축키 설정
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" ESC를 눌렀을때 영문으로 설정하도록 한다.
inoremap <ESC> <ESC>:set iminsert=0<CR>

"키 매핑
map <F1> K

"F3키를 {,}사이를 folding 시키게 mapping시킨다.
map <F3> [{V]}zf

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

"BufExplorer.
:nnoremap <silent> <F6> :BufExplorer<CR>

"Tag list를 위한 키맵핑
:nnoremap <silent> <F7> :Tlist<CR>

"Alternative file editing .h <-> .c
:nnoremap <silent> <F8> :A<CR>

"문서 뒤쪽 공백 지우기
:nnoremap <silent> <F10> :%s/\s\+$//g<CR>:%s/[ \t]*$//g<CR>:%s/\s*$<CR>:noh<CR>

"UTF-8 문서용으 변경하기
":nnoremap <silent> <F11> :set ft=actionscript<CR>
:nnoremap <silent> <F11> :%s/
//g<CR>

"파일을 형태를 doku wiki용으로 전환함.
:nnoremap <silent> <F12> :set ft=doku<CR>

"Ctrl+TAB키 맵핑.
map <c-tab> :tabnext<cr>
map <c-s-tab> :tabprevious<cr>

" 영역이 지정된 상태에서 Tab 과 Shift-Tab 으로 들여쓰기/내어쓰기를 할 수 있도록 함.
vmap <Tab> >gv
vmap <S-Tab> <gv

"vim에서 에러발생시 beep 대신에 Visual한 경고표시를 해주는 옵션.
"set visualbell

"윈도우 환경일 경우 Ctrl-k는 화대화, Ctrl-j는 화면 복구
if has("gui_win32")
 " 시스템 메뉴를 동작시키는 맵핑.
 "map <M-n> :simalt ~<CR> "동작하지 않는다.
 map <C-k> :simalt ~x<CR> "최대화 시키는 맵핑
 map <C-j> :simalt ~r<CR> "원래대로 복구하는 맵핑
endif

"gui_win32일 때 Alt_Space 키가 시스템 메뉴로 동작하도록 한다.
"참고 : http://www.vim.org/tips/tip.php?tip_id=645
if has("gui_win32")
 set winaltkeys=yes
endif

" 백스페이스 사용
set bs=indent,eol,start

"검색결과가 highlight되어 있을 때 C-L을 눌러서 다시 그리기를 하면 nohighlight
"명령을 같이 넣는 맵핑을 추가함.
"http://bbs.kldp.org/viewtopic.php?t=50397&highlight=vim
"noremap <C-L> :nohls<CR><C-L>

"창의 이동 및 열기 닫기는
"Ctrl+Shift를 누르고 사용한다.
"분리된 창 사이로 화면 이동하기
map <A-h> <c-w>h
map <A-j> <c-w>j
map <A-k> <c-w>k
map <A-l> <c-w>l

"분리된 창에서 열기와 닫기
map <A-o> <c-w>o
map <A-c> <c-w>c


" Vim 정규식이 아닌 진짜 정규식 사용을 의무화(?)
" \v 라는 글자가 항상 표시되니까 햇갈린다... -.-
"map / /\v

" Tab 자동 완성시 가능한 목록을 보여줌
set wmnu

"초기에 number 기능을 disable시키도록 하자.
set nonu

" 각종 toggle 기능
fu! ToggleNu()
 let &nu = 1 - &nu
endf
fu! ToggleList()
 let &list = 1 - &list
endf
fu! TogglePaste()
 let &paste = 1 - &paste
endf
fu! ToggleSpell()
 let &l:spell = 1 - &l:spell
endf
map \n :call ToggleNu()<CR>
map \l :call ToggleList()<CR>
map \p :call TogglePaste()<CR>
map \s :call ToggleSpell()<CR>


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 프로그래밍 관련 설정
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"cscope를 위한 세팅
let Cscope_OpenQuickfixWindow = 1
let Cscope_JumpError = 0
let Cscope_PopupMenu = 1
let Cscope_ToolsMenu = 1

"Grep 명령을 위한 설정.
let Grep_Skip_Files = '*.bak *.~ tags cscope.out'
let Grep_Skip_Dirs = '.svn'

"ctrl-]를 tjump로 설정함.
nmap <C-]> :exe "tjump ".expand("<cword>")<CR>

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 상용구 설정
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
iab vdate <C-R>=strftime("%Y-%m-%d %H:%M:%S")<CR>
iab vtime <C-R>=strftime("%H:%M:%S")<CR>
iab vtext <C-R>="/* vim:set ft=help ts=4 sw=4 sts=4 ai tw=78: */"
iab vdoku <C-R>="/* vim:set ft=doku ts=4 sw=4 sts=4 ai tw=78: */"
"iab xname 인클루드

"set VIMTEMPLATE = 'C:\Program Files\Vim\vimfiles\templates'

" doxygen syntax▒▒ ▒▒▒ ▒▒▒.
au! Syntax {cpp,c,idl}
au Syntax {cpp,c,idl} runtime syntax/doxygen.vim

" 팝업 메뉴 색상
hi Pmenu guibg=#666666
hi PmenuSel guibg=#8cd0d3 guifg=#666666
hi PmenuSbar guibg=#333333

 

반응형

'Software Science' 카테고리의 다른 글

[Spark] Learning Spark  (0) 2018.07.01
[Python] 안녕파이썬 (강의)  (0) 2018.04.19
[Linux] grep, find 명령어  (0) 2018.04.01
[Linux] 환경설정 (.bashrc)  (0) 2018.04.01
[Linux] Make 파일  (0) 2018.04.01