.vimrc 설정 정리
vimrc 설정
vim설정을 위한 .vimrc 내용들 정리. 주로 내가 사용할 내용들만을 기준으로 다룰 것이다.
1. 기본 설정
set nocompatible " 오리지널 vi와 호환되지 않게.
filetype off " Vundle 설정을 위한 시작 부분
" for Vundle -----------------------------------------
" end of Vundle -------------------------------------
" vim 기본 설정 영역
filetype plugin indent on
colorscheme molokai " 컬러 스킴 설정.(plugin 설치 필요)
" Syntax 지원
if has("syntax")
syntax on
endif
set encoding=utf-8 " encoding 설정
set fileencodings=utf-8,cp949,default,latin1
set termencoding=utf-8
" set printencoding=utf-8 " 인쇄 encoding 옵션
" set printmbcharset=ISO10646
" set printmbfont=r:NanumGothiccoding,c:yes,a:yes
set number " 좌측 라인 넘버 표시
set numberwidth=6 " 넘버 표시 공간의 너비
set title " 하단 편집 문서의 이름 표시
set ruler " 하단부에 현재 커서의 위치를 표시
set shiftwidth=4 " 들여쓰기 간격
set tabstop=4 " tab 간격
" set expandtab " tab을 space로 변경하여 저장
set cindent
set autoindent " 자동 들여쓰기
set smartindent
set hlsearch " 검색 결과 강조
set incsearch " 증가 방향으로 검색
set nowrapscan " 검색 시 파일 끝에서 되돌려 검색하지 않게
set ignorecase " 검색 시 대소문자 구분하지 않음
set nowrap " 자동 줄 바꿈 사용하지 않음
set autowrite " 자동 저장
set autoread
" set paste " 붙여 넣기 시 계단현상 방지
set showmatch " 커서 위치 시 괄호의 끝 혹은 시작을 반전으로 표시
" 하단 상태 표시 라인 설정(vim-airline 플러그인 사용으로 대체)
" set statusline=%4*%<\ %1*[%F]
" set statusline+=%4*\ %5*[%{&encoding}, " encoding
" set statusline+=%{&fileformat}]%m " file format
" set statusline+=%4*%=\ %6*%y%4*\ %3*%l%4*/%L,\ %3*%c%4*\ \<\ %2*%P%4*\ \>
set laststatus=2 " 상태 라인 표시 위해(vim-airline 에서도 사용)
" set cursorline " 현재 커서가 있는 라인을 강조
set tagbsearch " 태그 데이터 베이스를 이진으로 검색
여기까지가 vim 을 위한 기본 설정 부분이었다.
주 참고 블로그: jjeong
2. Vundle을 이용한 플러그인 설치 및 설정
Vundle 이란 vim의 다양한 플러그인들을 설치 하기 쉽게 관리해주는 플러그인 매니저 이다.
가장 먼저 Vundle 플러그인을 설치해야 하는데, github에서 저장소를 clone 하는 형식으로 해당 플러그인을 설치할 수 있다.
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
그런 다음 Vundle 플러그인 활성화를 위한 작업을 해주어야 한다. 이 작업은 .vimrc
파일에서 Plugin 들을 명시하는 것으로 나의 경우는 1. 기본 설정
에서" for Vundle -------
과 " end of Vundle ------
부분 사이에 설정 라인들을 넣었다.
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin() " 관리할 플러그인들을 기술하기 위한 시작
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim' " Vundle 관리를 위해 필요한 부분
" 관리할 플러그인 항목들을 나열한다.
Plugin 'scrooloose/nerdtree' " 파일트리 창을 보여 줄 수 있는 플러그인
Plugin 'scrooloose/nerdcommenter' " 멀티라인 주석, 부분 주석 등에 대한 처리를 할 수 있는 플러그인
Plugin 'vim-airline/vim-airline' " 하단 상태바에 더 많은 정보를 출력
Plugin 'tpope/vim-fugitive' " vim에서 git의 기능을 사용할 수 있게 해준다
" Plugin 'scrooloose/syntastic' " vi로 편집 중 실시간으로 문법 체크 기능을 제공 해 주는 플러그인
Plugin 'ctrlpvim/ctrlp.vim' " 파일 찾기 기능(VS AssistX의 파일 네비게이터와 동일한 역할)
" Color scheme -----------------------------
Plugin 'altercation/vim-colors-solarized'
Plugin 'tomasr/molokai'
Plugin 'nanotech/jellybeans.vim'
" ------------------------------------------
"
Plugin 'valloric/youcompleteme' " 코드 자동 완성 기능을 위한 플러그인
Plugin 'taglist.vim' " 디파인 매크로, 함수, 변수 등의 리스트를 정렬하여 보여 줄 수 있는 플러그인
Plugin 'DoxygenToolkit.vim' " Doxygen 스타일의 주석을 자동으로 삽입 가능한 기능을 가진 플러그인
Plugin 'davidhalter/jedi-vim' " python에 대한 문법 preview 기능(?)
" Plugin 'brookhong/cscope.vim'
filetype plugin indent on
call vundle#end() " 관리 플러그인 종료
위와 같이 사용할 플러그인들을 넣어 준 후 .vimrc
저장한다. 위 기술한 Plugin들이 내가 사용하고자 하는 것들이며 더 많은 vim의 플러그인들은 Vim Awesome에서 찾아 볼 수 있다.
이제 vi의 커맨드 라인 모드 상에서 간단한 명령어를 통해 플러그인들을 설치 및 삭제 또는 조회 해 볼 수 있다.
- PluginInstall:
call vundle#begin()
과call vundle#end()
사이에 기술한 플러그인들을 설치 해 준다. - PluginList: 현재
.vimrc
파일에 기술 되어 있는 플러그인들을 볼 수 있다. - PluginClean: 설치한 플러그인을 지울 때 사용하는 명령어로 지우고 싶은 플러그인을
.vimrc
에서 지우고 저장한 뒤 해당 명령어를 수행하도록 한다.
이상, 여기까지 Vundle을 이용해 간단히 플러그인들을 설치 하는 법을 알아 보았다. 물론 vim을 더 미려하게 사용할 수 있게 해주는 플러그인들은 설치 이후에 설정을 해 주어야만 된다.(보통 .vimrc
을 통해 설정을 한다)
각자 나름대로 사용할 플러그인들의 상세 설정은 Vim Awesome 또는 검색을 통해 보다 더 많은 정보를 얻을 수 있을 것이다.
3. 단축키(키맵) 설정
참조: [vim wiki])
"-------------------------------------------------------
" key mappings
nmap <F3> <ESC>:wa!<CR>
nmap <F4> <ESC>:wqa!<CR>
nmap <F7> <ESC>:Tlist<CR>
nmap <F8> <ESC>:NERDTreeToggle<CR>
nmap <leader><F8> <ESC>:NERDTreeFind<CR>
if has("autocmd")
" 자동완성
" autocmd FileType * inoremap { {}<LEFT>
" autocmd FileType * inoremap [ []<LEFT>
" autocmd FileType * inoremap ( ()<LEFT>
" autocmd FileType * inoremap " ""<LEFT>
" autocmd FileType * inoremap ' ''<LEFT>
" Python 설정
autocmd BufNewFile,BufRead *.py setfiletype python
autocmd FileType python nmap <F5> <ESC>:wa!<CR>:!python3 %<CR>
" C++ 설정
autocmd BufNewFile,BufRead *.h,*.hpp,*.cc,*.c,*.cpp setfiletype cpp
autocmd FileType cpp nmap <F5> <ESC>:wa!<CR>:!make<CR>:cw<CR>
autocmd FileType cpp nmap <F6> <ESC>:cn<CR>
endif
4. 기타 Plugin 설정 내용들
플러그인들의 사용과 관련해 주로 많이 참조한 블로그: [Bluesh님 블로그]
내가 사용하는 플러그인 및 설정한 내용 위주로 정리.
NERDTree
let NERDTreeQuitOnOpen = 1 let NERDTreeShowHidden = 1 let g:NERDTreeWinPos = "right"
ctrlp
let g:ctrlp_custom_ignore = { \ 'dir': '\.git$\|public$\|log$\|tmp$\|vendor$', \ 'file': '\v\.(exe|so|dll)$' \ }
youcompleteme 설치 방법 및 설정 내용
youcompleteme
의 경우 플러그인 설치 뿐만 아니라 따로 컴파일 작업을 해주어야만 동작한다고 한다. 해당 컴파일을 수행하기 위한 패키지들을 설치.
$ sudo apt install build-essential cmake python-dev python3-dev clang
# 만일 C#을 지원하고자 한다면 `mono-devel`도 설치해야 한다.
$ sudo apt install mono-devel
# 2. Vundle을 이용한 플러그인들의 설치
과정을 진행 했다면, youcompleteme
플러그인 경로로 이동하여 서브모듈을 업데이트 한다.
$ cd ~/.vim/bundle/youcompleteme
$ git submodule update --init --recursive
이제 다음 과정으로, ~/.vim/bundle/youcompleteme
경로상에서 소스를 컴파일
$ ./install.py --clang-completer
C/C++ 스타일을 지원하기 위한 내용, --clang-completer
옵션 외에도 32bit 버전에서의 컴파일을 위한 옵션 --system-libclang
외에도 C# 지원을 위한 --omnisharp-complete
옵션 설정등이 있다.
여기까지, youcompleteme
를 위한 설치 과정은 완료 되었으며, 다음으로 설정 부분에 대해 알아보자.
- .vimrc에서
youcompleteme
옵션 설정
let g:ycm_global_ycm_extra_conf = '~/.vim/.ycm_extra_conf.py' " 첨부파일을 다운받아 위치 시킨 경로를 적어 준다.
let g:ycm_confirm_extra_conf = 0
let g:ycm_key_list_select_completion = ['', '']
let g:ycm_key_list_previous_completion = ['', '']
let g:ycm_autoclose_preview_window_after_completion = 1
let g:ycm_warning_symbol = '>*'
let g:ycm_show_diagnostics_ui = 0
let g:ycm_server_python_interpreter = '/usr/bin/python3'
let g:ycm_seed_identifiers_with_syntax = 1
let g:ycm_python_binary_path = '/usr/bin/python3'
let g:ycm_collect_identifiers_from_tags_files = 0
" nnoremap g :YcmCompleter GoTo
" nnoremap gg :YcmCompleter GoToImprecise
" nnoremap d :YcmCompleter GoToDeclaration
" nnoremap t :YcmCompleter GetType
" nnoremap p :YcmCompleter GetParent
- 표준 라이브러리에 대한 경로 추가
$ echo | g++ -std=c++11 -v -E -x c++ - " g++를 사용할 경우 $ echo | clang -std=c++11 -stdlib=libc++ -v -E -x c++ - " clang을 사용할 경우
위 처럼 각각의 사용하고자 하는 compiler에 대한 조회를 했을 때,#include "..." search starts here:
와 #include <...> search starts here:
부터, End of search list.
사이에 있는 경로 정보들을 .ycm_extra_conf.py
에 flags 옵션 란
안에 기존 다른 경로 값들이 위치 하고 있던 곳에 추가해주면 표준 라이브러리에 대한 함수나 클래스들의 목록도 볼 수 있게 된다.
# 추가 예시
(생략...)
'-isystem',
'cpp/BoostParts',
'-isystem',
'/usr/include/c++/7',
'-isystme',
'/usr/include/x86_64-linux-gnu/c++/7',
'-isystme',
'/usr/include/c++/7/backward',
'-isystme',
'/usr/lib/gcc/x86_64-linux-gnu/7/include',
'-isystme',
'/usr/local/include',
'-isystme',
'/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed',
'-isystme',
'/usr/include/x86_64-linux-gnu',
'-isystme',
'/usr/include',
get_python_inc(),
'-isystem',
(생략...)