1. 사전 준비 조건
(1) Python 지원이 가능한 최신 Vim 버전(7.3.584 이상) 필요
터미널에서 다음 명령어를 입력하여 버전 확인: vim –version 또는 Vim 내에서 version 명령어 사용, python 항목 앞에 '+' 기호가 있는지 확인
터미널에서 다음 명령어 실행:
sudo apt-get install python-dev
설치 중 문제가 발생할 경우, 다음 명령어 순서로 실행:
sudo apt-get update
sudo apt-get install -f
이후 재설치 시도:
sudo apt-get install python-dev
(2) cmake 설치
Ubuntu 환경에서는: sudo apt-get install cmake
(3) clang 설치
Ubuntu 환경에서는: sudo apt-get install clang
이 단계는 건너뛰어도 무방하며, YCM 컴파일 시 자동으로 설치됨
(4) Vundle 설치
Vim 플러그인 관리를 위한 도구로, 설치 및 제거가 간편하며 각 플러그인은 bundle 디렉토리 내의 폴더 형태로 존재함
2. Vundle 설치
(1) `$:git clone https://github.com/VundleVim/Vundle.vim ~/.vim/bundle/Vundle.vim`
('%'는 명령 프롬프트 표시)
(2) .vimrc 파일 시작 부분에 다음 내용을 삽입하고 저장:
set nocompatible " 개선된 모드 사용
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" Vundle 자체 관리를 위해 필요
Plugin 'VundleVim/Vundle.vim'
Plugin 'scrooloose/syntastic'
Plugin 'tpope/vim-fugitive'
Plugin 'Lokaltog/vim-easymotion'
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
Plugin 'tpope/vim-rails.git'
Plugin 'L9'
Plugin 'FuzzyFinder'
Plugin 'git://git.wincent.com/command-t.git'
Plugin 'file:///Users/gmarik/path/to/plugin'
Plugin 'ycm-core/YouCompleteMe'
call vundle#end()
filetype plugin indent on " 필수!
참고: Plugin '플러그인명 또는 Git 링크' 는 설치할 플러그인을 의미
(3) 다시 Vim을 열고 명령 모드에서 실행: PluginInstall
플러그인 설치 진행:
Plugin 앞에 '>'가 표시되면 해당 플러그인이 설치 중이며, YouCompleteMe는 설치 시간이 다소 소요되므로 인내심을 갖고 대기, 마지막에 오류 메시지가 나타나지만 이는 정상이며 YCM은 수동으로 라이브러리 파일을 컴파일해야 하므로 위 그림과 같은 '!' 표시는 무시해도 됨
참고: 플러그인 제거를 원할 경우, .vimrc에서 "Plugin '플러그인' " 문장을 삭제한 후 Vim 명령 모드에서 PluginClean을 실행
3. YouCompleteMe 컴파일
(1)
% cd ~/.vim/bundle/YouCompleteMe/
% python3 install.py --clang-completer
--clang-completer 파라미터는 C/C++ 자동 완성을 지원하기 위한 것이며 필요하지 않을 경우 생략 가능
컴파일 과정은 다소 시간이 소요되므로 인내심을 가지고 대기
다음 경고가 나타날 경우: WARNING: this script is deprecated. Use the install.py script instead.
File /home/user/.vim/bundle/YouCompleteMe/third_party/ycmd/build.py does not exist; you probably forgot to run:
git submodule update --init --recursive
원인은 Vundle 설치 미사용 또는 네트워크 속도 문제로 의존 패키지를 완전히 다운로드하지 못한 경우
해결 방법:
YouCompleteMe 디렉토리 진입 후 터미널에서 git submodule update --init --recursive 입력
(2) 설정 파일 .ycm_extra_conf.py 위치 찾기
온라인 문서에는 YouCompleteMe/cpp/ycm에 있다고 되어 있으나, 실제 YouCompleteMe 디렉토리에는 cpp 폴더가 없으며, 이전에는 third_party/ycmd/cpp/ycm 디렉토리에 있었으나 현재는 third_party/ycmd/examples 디렉토리로 이동됨.
% cd ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/
ls -a 로 확인 가능
(3) YouCompleteMe 내에 cpp/ycm 디렉토리 생성 후 .ycm_extra_conf.py 복사
% cd ~/.vim/bundle/YouCompleteMe
% mkdir cpp
% mkdir cpp/ycm
% cp third_party/ycmd/examples/.ycm_extra_conf.py cpp/ycm/
4. .vimrc 설정 파일 수정
다음 내용을 .vimrc에 추가:
" 전역 설정 파일 탐색
let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py'
" Python 검사를 위한 syntastic 비활성화
let g:syntastic_ignore_files=[".*\.py$"]
" ctags로 생성된 태그 파일 사용
let g:ycm_collect_identifiers_from_tag_files = 1
" 시맨틱 자동 완성 활성화
" C 언어 자동 완성 단축키 변경 (기본은 CTRL+space, ALT+;로 변경 - 효과 미확인)
"let g:ycm_key_invoke_completion = ''
" 정의로 이동하는 단축키를 ALT+G로 설정 - 효과 미확인
"nmap :YcmCompleter GoToDefinitionElseDeclaration =expand("<cword>")<CR><CR>
" 키워드 자동 완성
"let g:ycm_seed_identifiers_with_syntax = 1
" 자동 완성 항목 수신 후 분할 창 표시 방지
set completeopt-=preview
" 일반 IDE와 동일한 자동 완성 동작 설정
set completeopt=longest,menu
" Vim 시작 시 ycm_extra_conf 파일 검사 정보 표시 안 함
let g:ycm_confirm_extra_conf=0
" 매번 새롭게 일치 항목 생성, 캐시 사용 안 함
let g:ycm_cache_omnifunc=0
" 주석에서도 자동 완성 가능
let g:ycm_complete_in_comments=1
" 첫 문자 입력 시 자동 완성 시작
let g:ycm_min_num_of_chars_for_completion=1
" 오류 심볼
let g:ycm_error_symbol='>>'
" 경고 심볼
let g:ycm_warning_symbol='>*'
" ultisnips 코드 스니펫 자동 완성 사용 안 함, 필요 시 1로 설정
" let g:ycm_use_ultisnips_completer=0
위 내용 중 첫 번째 전역 설정 파일 탐색 문장을 제외하고 나머지 문장은 필요에 따라 변경, 삭제 또는 추가 가능
참고: 3단계에서 cpp/ycm 디렉토리 생성 및 .ycm_extra_conf.py 파일 복사 미수행 시, 첫 번째 줄의 경로를 실제 전역 설정 파일 위치로 변경:
let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py'
5. .vimrc 저장 후 종료, C/C++ 소스 프로그램 열어서 자동 완성 효과 체험
C++ STL 라이브러리 스마트 자동 완성도 가능:
6.
(1) 위에서 설치한 syntastic과 함께 문법 검사도 가능
'>>'는 문법 오류 지점을 나타내지만 검사 속도가 느려 실용성이 낮음
자동 문법 검사가 번거로울 경우 비활성화 가능:
/bundle/YouCompleteMe/plugin 진입
youcompleteme.vim 파일의:
141번째 줄의 파라미터를 0으로 변경
7. 헤더 파일 추가
현재 include에서 stdio.h 등 헤더 파일 자동 완성이 불가능하므로 /usr/include 경로를 추가해야 함. 경로는 ~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py 파일의 flags 배열에 추가하며, 각 경로 앞에는 '-isystem'을 붙여야 함
향후 boost 라이브러리 등의 자동 완성이 필요할 경우에도 해당 경로를 추가해야 함
-YouCompleteMe는 더 많은 강력한 기능을 제공하며 관심이 있다면 계속 탐색 가능
자동 들여쓰기
자동 들여쓰기는 유용하지만 특정 상황(예: 다중 행 함수 정의)에서는 원하는 결과를 얻기 어려우며, 특히 PEP8 표준 준수 측면에서 문제가 있음. indentpython.vim 플러그인을 활용하여 이 문제 해결 가능:
Plugin 'vim-scripts/indentpython.vim'