DaleSchool

Neovim 시작하기

입문20분

학습 목표

  • Vim과 Neovim의 차이를 설명할 수 있다
  • Neovim을 설치하고 실행할 수 있다
  • init.lua로 기본 설정을 할 수 있다
  • Lua 설정의 기본 문법을 이해할 수 있다

Vim을 어느 정도 다룰 수 있게 되었다면, Neovim이라는 선택지가 눈에 들어올 거예요. Neovim은 Vim의 장점은 그대로 유지하면서 현대적인 기능을 추가한 에디터예요.

동작하는 코드

설치

# macOS
brew install neovim

# Ubuntu / Debian
sudo apt install neovim

# 설치 확인
nvim --version

실행은 터미널에서 nvim을 입력하면 돼요. Vim에서 쓰던 모든 키바인딩이 그대로 동작해요.

첫 번째 Lua 설정 파일

Neovim의 설정 파일은 ~/.config/nvim/init.lua예요. 디렉터리를 만들고 파일을 생성하세요.

mkdir -p ~/.config/nvim
nvim ~/.config/nvim/init.lua

아래 내용을 입력해 보세요.

-- 리더 키 설정 (다른 설정보다 먼저!)
vim.g.mapleader = ' '

-- 기본 옵션
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.expandtab = true
vim.opt.ignorecase = true
vim.opt.smartcase = true
vim.opt.termguicolors = true

-- 키맵
vim.keymap.set('n', '<leader>w', ':w<CR>', { desc = '파일 저장' })
vim.keymap.set('n', '<leader>q', ':q<CR>', { desc = '종료' })

저장하고 Neovim을 다시 열면 줄 번호와 상대 줄 번호가 표시돼요.

직접 수정하기

init.lua를 열고 옵션을 바꿔 보세요.

-- 커서 줄 강조
vim.opt.cursorline = true

-- 검색 결과 하이라이트
vim.opt.hlsearch = true

-- 클립보드 연동
vim.opt.clipboard = 'unnamedplus'

-- 스크롤 여유 줄
vim.opt.scrolloff = 8

vim.keymap.set으로 자주 쓰는 동작에 단축키를 추가해 보세요.

-- 버퍼 이동
vim.keymap.set('n', '<leader>bn', ':bnext<CR>', { desc = '다음 버퍼' })
vim.keymap.set('n', '<leader>bp', ':bprevious<CR>', { desc = '이전 버퍼' })

-- 창 이동을 Ctrl + hjkl로
vim.keymap.set('n', '<C-h>', '<C-w>h')
vim.keymap.set('n', '<C-j>', '<C-w>j')
vim.keymap.set('n', '<C-k>', '<C-w>k')
vim.keymap.set('n', '<C-l>', '<C-w>l')

"왜?"

왜 Vim 대신 Neovim을 쓸까요?

특징VimNeovim
설정 언어VimScriptLua + VimScript
LSP 지원플러그인 필요내장
비동기 처리제한적완전 지원
플러그인 생태계성숙빠르게 성장 중
기본 설정최소더 합리적인 기본값

Lua는 빠르고 배우기 쉬워요. VimScript에서 설정을 어떻게 옮기는지 비교해 볼게요.

VimScript (vimrc)Lua (init.lua)
set numbervim.opt.number = true
set tabstop=2vim.opt.tabstop = 2
let mapleader = " "vim.g.mapleader = ' '
nnoremap <leader>w :w<CR>vim.keymap.set('n', '<leader>w', ':w<CR>')
colorscheme desertvim.cmd('colorscheme desert')

기존 .vimrc가 있다면 한꺼번에 바꿀 필요 없어요. Neovim은 VimScript도 지원하니까, 하나씩 Lua로 옮기면 돼요.

심화 학습

설정 파일 분리하기

설정이 길어지면 파일을 나눌 수 있어요. ~/.config/nvim/lua/ 디렉터리에 모듈을 만들면 돼요.

~/.config/nvim/
├── init.lua          -- require('options'), require('keymaps')
└── lua/
    ├── options.lua   -- vim.opt 설정
    └── keymaps.lua   -- vim.keymap.set 설정

init.lua에서 이렇게 불러와요.

require('options')
require('keymaps')

나만의 init.lua 만들기

  1. ~/.config/nvim/init.lua 파일을 새로 만드세요.
  2. 리더 키를 스페이스바로 설정하세요.
  3. 줄 번호, 탭 크기 2, 대소문자 무시 검색을 설정하세요.
  4. <leader>w로 저장, <leader>q로 종료하는 키맵을 추가하세요.
  5. 아무 파일을 열어서 설정이 적용되었는지 확인하세요.

Neovim의 설정 파일 경로는 어디인가요?