graf
neovim + 자동완성 설치 본문
매번 vim만 쓰다가 최근에 정말 오랜만에 IDE를 써봤는데
자동완성 기능이 이렇게 편한 건지 지금 알았다.
그동안 코딩할 때 다 타이핑했는데..
vscode에 이미 vim extention을 깔아놔서
wsl만 연결하고 vscode를 계속 쓸까 했는데
vim에 익숙해져서 그런가 이것도 번거롭다.
알아보니까 neovim을 쓰면 터미널에서도 자동완성 기능까지 쓸 수 있다고 한다.
이걸 한번 추가해보자.
1. neovim 설치 및 실행
sudo apt install -y neovim

한번 깔아봤는데 이건 너무 구형이다.
0.9 이상을 쓰는게 좋다고 한다.
wget https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz
tar xzf nvim-linux-x86_64.tar.gz
./nvim-linux-x86_64/bin/nvim
신형으로 깃허브에서 가져왔다.
실행 파일 형태로 다 들어있다.

실행했더니 이런 창이 뜬다.
생긴거부터 기깔나네

버전은 0.12다.

실행 파일은 저 부분에다 넣어야겠다.
sudo cp neovim_setting/nvim-linux-x86_64/bin/nvim /usr/local/bin/nvim
복사했다.

이제 뜬다.

실행했더니 어떤 경고같은게 뜬다.
다운받은 패키지 안에서 어떤 파일을 참조해야하는 것 같다.
sudo ln -s /home/demgraf/neovim_setting/nvim-linux-x86_64/bin/nvim /usr/local/bin/nvim

복사하지 말고 심볼릭 링크로 해보자.
nvim test.py

이제 오류는 안 난다.
설치는 끝났고 이제 확장 기능들을 추가해야한다.
2. 자동완성 기능 추가
git clone https://github.com/folke/lazy.nvim.git ~/.local/share/nvim/lazy/lazy.nvim
lazy nvim 설치.
nvim의 패키지 관리자다.
mkdir -p ~/.config/nvim
vim ~/.config/nvim/init.lua
neovim 설정 디렉토리 추가 후 파일 생성
vim.g.mapleader = " "
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
-- LSP
{
"neovim/nvim-lspconfig",
},
-- 자동완성
{
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
},
},
})
-- nvim-cmp
local cmp = require("cmp")
cmp.setup({
mapping = cmp.mapping.preset.insert({
["<Tab>"] = cmp.mapping.select_next_item(),
["<S-Tab>"] = cmp.mapping.select_prev_item(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
}),
sources = {
{ name = "nvim_lsp" },
},
})
-- LSP capability 연결
local capabilities = require("cmp_nvim_lsp").default_capabilities()
-- Python
vim.lsp.config("pyright", {
capabilities = capabilities,
})
-- C/C++
vim.lsp.config("clangd", {
capabilities = capabilities,
})
vim.lsp.enable("pyright")
vim.lsp.enable("clangd")
파일 생성 후 위 내용 복붙
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install nodejs
nodejs를 깔아야하는데 이것도 바로 apt로 받아오니까
너무 구형이 깔려서 호환이 안되길래 이렇게 설치했다.
npm install -g pyright
sudo apt install clangd
c와 파이썬 언어 서버 설치
자동 완성을 위해 필수

이제 입력할 때 자동 완성 목록이 뜬다.
3. 설정 파일 작성
3.1 .vimrc 적용
set ts=4
set nu
autocmd FileType python setlocal makeprg=python3\ -m\ ruff\ check\ --select\ E9,F63,F7,F82\ %
autocmd FileType python setlocal errorformat=%f:%l:%c:%m,%f:%l:\ %m
autocmd FileType c setlocal makeprg=gcc\ -Wall\ -fsyntax-only\ %
autocmd FileType c setlocal errorformat=%f:%l:%c:\ %m
autocmd BufWritePost *.py make
autocmd BufWritePost *.c make
nnoremap q :w<CR>
nnoremap Q :q<CR>
이건 내가 기존 vim에서 쓰던 설정인데 그대로 가져왔다.
cp ~/.vimrc ~/.config/nvim/init.vim

그냥 가져오니까 뭔가 충돌이 난다.

init.vim 파일은 지우고 .vimrc를 lua 파일에서 추가했다.

이제 잘 된다.
의존성 있는 패키지들이 많아서 중간에 짜잘한 문제가 좀 많긴 했는데
어차피 나중에 계속 바뀔 것 같아서 굳이 기록은 안 했다.
3.2 화면 흔들림 제거

근데 타이핑하는 와중에 자꾸 옆에 경고가 뜨면서 화면이 좌우로 흔들린다.
별거 아닌 것 같은데 써보니까 굉장히 거슬린다.
vim.opt.signcolumn = "yes"
lua 파일에 마지막에 추가

이제 왼쪽에 경고가 나오는 공간이 미리 할당돼있어서 화면이 흔들리지 않는다.
비교 사진을 찍었어야 했는데 깜빡했다.

이제 필요한 기능은 다 들어왔다.
자동완성도 되고 기존에 쓰던 설정 적용도 끝났다.
pwntools같은건 그냥 직접 치는게 더 빠른 것 같은데
위에처럼 긴 코드 칠 때는 자동 완성이 진짜 확실히 편하다.
그래도 익숙해지려면 시간이 좀 걸릴 것 같다.
3.3 글자색 설정

지금 다 좋은데 딱 하나 아쉬운게
원래 쓰던 vim에 비해서 색깔이 전체적으로 좀 흐릿해서 코드가 눈에 잘 안 들어온다.
{
"scottmckendry/cyberdream.nvim",
priority = 1000,
},
lua 파일에 lazy setup에 추가
vim.cmd.colorscheme("cyberdream")
이건 맨 아래 추가
색깔은 이렇게만 하면 적용이 끝난다.
나는 cyberdream으로 했는데 원하는 디자인을 골라서 넣으면 된다.

이게 처음 상태

이게 지금이다.
다른 색깔도 다 하나씩 해봤는데 이게 제일 선명하고 좋은 것 같다.
vim.g.mapleader = " "
vim.cmd('source ~/.vimrc')
vim.opt.termguicolors = true
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
vim.opt.rtp:prepend(lazypath)
vim.keymap.set("i", "kj", "<Esc>")
vim.opt.timeoutlen = 300
require("lazy").setup({
{
"scottmckendry/cyberdream.nvim",
priority = 1000,
},
-- LSP
{
"neovim/nvim-lspconfig",
},
-- 자동완성
{
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
},
},
})
-- nvim-cmp
local cmp = require("cmp")
cmp.setup({
mapping = cmp.mapping.preset.insert({
["<Tab>"] = cmp.mapping.select_next_item(),
["<S-Tab>"] = cmp.mapping.select_prev_item(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
}),
sources = {
{ name = "nvim_lsp" },
},
})
-- LSP capability 연결
local capabilities = require("cmp_nvim_lsp").default_capabilities()
-- Python
vim.lsp.config("pyright", {
capabilities = capabilities,
})
-- C/C++
vim.lsp.config("clangd", {
capabilities = capabilities,
})
vim.lsp.enable("pyright")
vim.lsp.enable("clangd")
vim.opt.signcolumn = "yes"
vim.cmd.colorscheme("cyberdream")
그렇게 완성된 init.lua 파일 전문이다.
그동안 vim만 쓰면서 다 타이핑했는데
자동완성 그냥 진짜 너무 편하다.
vim의 상위호환처럼 느껴질 정도로 편하다.
대박이네..
'기타' 카테고리의 다른 글
| 정보처리기사, 리눅스마스터1급, 네트워크관리사2급 합격 후기 (0) | 2026.03.13 |
|---|