.
vim에서도 여러 plug-in을 사용하면 Source Insight 및 Visual Studio 수준의 자동완성 기능을 사용할 수 있다.
다만, 내 작업환경상 폐쇄망에서 작업하는 경우가 많다.
적합한 Tool을 찾아보다가 YouCompleteMe를 알게되어서, 본 글에 설치 및 사용방법을 작성한다.
(YCM은 완벽히 설치 후, Directory를 그대로 복사해서 옮기면 다른 환경에서도 수행이 쉽다.)
※ 환경
| vim | 9.1 |
| python | 3.12.3 |
| cmake | 3.22.1 |
| Ubuntu | 24.04 |
※ Vundle 설치
만약 완전 처음부터 Set Up 해야하는 경우라면, vim bundle 부터 설치해야 할 수 있다.
mkdir -p ~/.vim/bundle/
cd ~/.vim/bundle/
git clone https://github.com/VundleVim/Vundle.vim.git
vimrc를 아래처럼 수정한다.
vim ~/.vimrc
# File: .vimrc #
# 필수
set nocompatible
filetype off
# 초기화를 위한 run time path 설정
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
# Vundle 스스로 자신을 관리하도록
Plugin 'VundleVim/Vundle.vim'
call vundle#end()
# 필수
filetype plugin indent on
vim 실행 후, 아래 명령을 입력해서 vundle 초기 설정을 완료한다.
:PluginInstall
※ YouCompleteMe 설치
먼저 필요한 package들을 설치한다.
# 최소 패키지 설치
apt update
apt install vim vim-gtk3
apt install build-essential cmake vim-nox python3-dev
YouCompleteMe를 설치한다.
- 최신 version에서는 Kernel Source Code가 제대로 Parsing되지 않는것을 발견해서, legacy version으로 설치한다.
- 여러 종류의 언어에 대해서 자동완성을 제공하지만, C/C++만 선택해서 설치했다.
cd ~/.vim/bundle/
git clone --recursive --branch=legacy-vim-8.2 https://github.com/ycm-core/YouCompleteMe.git
cd ~/.vim/bundle/YouCompleteMe/
python3 install.py --clang-completer --force-sudo --verbose
내가 쓰기 편한 몇가지 옵션을 추가하기 위해 vimrc에 아래처럼 추가한다.
# File: .vimrc #
""""""""" YouCompleteMe """""""""
" 왼쪽에 compilatione error marker 제거 "
let g:ycm_enable_diagnostic_signs = 0
" compile warning 의심될때 글자색 변경되는거 금지 "
let g:ycm_enable_diagnostic_highlighting = 0
" 오른쪽 위의 preview window 제거 "
set completeopt-=preview
" ETNER 입력하면 popup menu 종료 "
let g:ycm_key_list_stop_completion = ['<C-y>', '<CR>']
이제 설치는 완료했다.
※ YouCompleteMe 테스트
해당 자동완선 plug-in은 clang에서 제공하는 compile_commands.json 파일을 분석해서 자동완성 기능을 제공한다.
아래는 cmake를 이용해서 compile_commands.json 파일을 생성하는 방법에 대해서 간단히 예시를 작성한다.
compile_commands.json 파일은 Build를 한번 수행한 후에 생성할 수 있다.
Source Tree구조는 아래와 같다.
├── CMakeLists.txt
└── src
└── main.c
CMakeLists.txt 파일은 아래처럼 작성한다.
# 최소 요구 CMake version
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
# 수행과정을 콘솔에 출력
SET(CMAKE_VERBOSE_MAKEFILE true)
# compile_commands.json 생성
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# 컴파일러 경로 지정
SET(CMAKE_C_COMPILER gcc)
# 컴파일러 옵션 추가
ADD_COMPILE_OPTIONS(-g -Wall -O0)
# 바이너리 출력 디렉토리 지정
# SET(RUNTIME_OUTPUT_DIRECTORY /output)
# 변수 정의
SET(SRC_FILES src/main.c)
SET(BIN_FILE myapp.out)
# 최종 실행파일 정의
ADD_EXECUTABLE(${BIN_FILE} ${SRC_FILES})
이제 아래 명령어로 Build를 수행한다.
mkdir -p build
cd build/
cmake ..
make all
# out/ 위치에 생성된 compile_commands.json을 top 위치로 이동시킨다
mv compile_commands.json ..
이제 vim으로 코드를 작성하면 자동 완성이 동작하는걸 확인 할 수 있다.

※ Kernel에서 compile_commands.json 생성
Root Directory에서 아래 Script를 수행한다.
scripts/clang-tools/gen_compile_commands.py
YouCompleteMe가 제대로 설치되어 있다면, kernel에 대해서도 잘 작동한다.

만약 vim 실행 시,
"vim undefined symbol: PyTuple_Type" Error 발생하면,
Makefile에 Python Version을 지정하고,
CONF_OPT_PYTHON3 = --enable-python3interp --with-python3-command=python3.8
rdynamic option을 추가해서 vim을 빌드한다.
make LDFLAGS=-rdynamic reconfig
( 참고 : https://github.com/vim/vim/blob/master/src/INSTALL )
※ 출처 및 참고
https://github.com/VundleVim/Vundle.vim
GitHub - VundleVim/Vundle.vim: Vundle, the plug-in manager for Vim
Vundle, the plug-in manager for Vim. Contribute to VundleVim/Vundle.vim development by creating an account on GitHub.
github.com
https://github.com/ycm-core/YouCompleteMe
GitHub - ycm-core/YouCompleteMe: A code-completion engine for Vim
A code-completion engine for Vim. Contribute to ycm-core/YouCompleteMe development by creating an account on GitHub.
github.com
scripts/gen_compile_commands.py - pub/scm/linux/kernel/git/nmenon/linux - Git at Google
# SPDX-License-Identifier: GPL-2.0 # Copyright (C) Google LLC, 2018 # Author: Tom Roeder """A tool for generating compile_commands.json in the Linux kernel.""" _DEFAULT_OUTPUT = 'compile_commands.json' _DEFAULT_LOG_LEVEL = 'WARNING' _FILENAME_PATTERN = r'^
kernel.googlesource.com
.
'Linux > vim' 카테고리의 다른 글
| [vim] vim-ollama (private AI assistant) (1) | 2025.05.27 |
|---|---|
| [vim] 임의 위치의 tags & cscope 추가 (0) | 2024.09.21 |
| [vim][c] syntax highlight (0) | 2024.02.03 |
| [vim] C언어 #ifdef (0) | 2024.02.03 |
| [vim] mark 설치 (형광펜 기능) (0) | 2024.02.03 |