graf

neovim + 자동완성 설치 본문

기타

neovim + 자동완성 설치

graf 2026. 5. 21. 16:48

 

매번 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의 상위호환처럼 느껴질 정도로 편하다. 

대박이네..