'youcompleteme'에 해당되는 글 1건

.vimrc 설정 정리

Linux 2018. 8. 29. 16:38

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 설치 방법 및 설정 내용

참조: [neverapple88의 블로그]

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.pyflags 옵션 란안에 기존 다른 경로 값들이 위치 하고 있던 곳에 추가해주면 표준 라이브러리에 대한 함수나 클래스들의 목록도 볼 수 있게 된다.

# 추가 예시
(생략...)
'-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',
(생략...)


블로그 이미지

나오K

,