포스트

Vim vs Neovim vs 배포판 — 각 계층이 제공하는 기능 정리

Vim 내장, Neovim 추가, 배포판 계층별로 어떤 기능을 제공하는지 구분 정리

Vim vs Neovim vs 배포판 — 각 계층이 제공하는 기능 정리

Vim의 기본 기능, Neovim이 추가한 기능, 배포판(LazyVim·NvChad·AstroNvim 등)이 올린 계층을 구분해서 정리한다. “이 기능이 어디서 온 건지” 헷갈릴 때 참고용. 3계층은 배포판 중 LazyVim을 예시로 든다.

어디서 출발할지 고민이라면 Neovim을 어디서 시작할까 — Vanilla / kickstart.nvim / LazyVim 비교 글 참고.

Vim — 기본 제공

1991년 Bram Moolenaar가 vi의 개선판(“Vi IMproved”)으로 발표. 이후 30년 넘게 Bram이 사실상 단일 메인테이너로 유지했고, 2023년 8월 그의 사망 이후 커뮤니티가 이어받고 있다. 에디터의 근간 — 모션, 오퍼레이터, 레지스터 등 시간이 지나도 변하지 않는 것들.

기능설명명령/키
Quickfix에러/검색 결과 목록, 순차 이동:copen, :cn, :cp, :cdo
Location list윈도우별 quickfix:lopen, :ln, :lp
Marks파일 내/전역 점프 포인트ma (설정), `a (이동), :marks
Registers이름 붙은 클립보드, 매크로 저장소"ay (복사), "ap (붙여넣기), :reg
Macros키 입력 녹화/재생qa (녹화), q (정지), @a (재생)
Text objects의미 단위로 조작ciw, ca{, dip, vat
TagsLSP 없이 심볼 정의 이동 (ctags)Ctrl-], :tag
gf / gd커서 아래 파일 열기 / 로컬 선언 이동gf, gd
:g패턴 매치 라인에 Ex 명령 실행:g/pattern/d, :g/TODO/t$
Folding코드 접기za (토글), zR (전체 열기), zM (전체 접기)
Spell check내장 맞춤법 검사:set spell, ]s, z=
Sessions에디터 상태 저장/복원:mksession, :source Session.vim
=자동 인덴트== (한 줄), gg=G (전체)
%매칭 괄호/블록 이동%

Neovim — Vim 위에 추가된 것

2014년 Thiago de Arruda가 Vim에서 fork. 직접적 계기는 그의 대규모 리팩토링 패치를 Bram이 거부한 것이지만, 근본 동기는 1인 메인테이너 의존, 비동기 처리 부재, 모놀리식 C 코드베이스의 확장성 한계였다. 이후 Lua 임베딩, 비동기 작업, RPC API를 도입했고, 0.5에서 LSP 클라이언트와 Treesitter를 코어에 내장하면서 “플러그인 없이도 IDE 기반이 깔린 에디터”가 됐다.

내장 LSP 클라이언트 (vim.lsp)

플러그인이 아니라 Neovim 코어에 포함된 LSP 프로토콜 구현체.

기능설명API
Diagnostics에러/경고 인라인 표시vim.diagnostic.open_float()
Hover타입/문서 팝업vim.lsp.buf.hover()
Definition / References정의 이동, 참조 목록vim.lsp.buf.definition(), references()
Rename프로젝트 범위 심볼 리네임vim.lsp.buf.rename()
Code actions수정 제안, import, 리팩토링vim.lsp.buf.code_action()
FormattingLSP 기반 포맷vim.lsp.buf.format()
CodeLens함수 위 액션 힌트 (참조 수, 테스트 실행 등)vim.lsp.codelens.run()
Document highlight커서 위치 심볼과 같은 심볼 강조vim.lsp.buf.document_highlight()
Inlay hints인라인 타입/파라미터 힌트 (0.10+)vim.lsp.inlay_hint.enable(true)
Semantic tokensLSP 기반 의미론적 구문 강조서버 지원 시 자동 활성화

CodeLens, inlay hints, document highlight 등은 모두 Neovim 내장 기능이다. LazyVim은 키맵(<leader>cc 등)만 붙여준 것.

Treesitter (vim.treesitter)

AST 기반 파서 프레임워크. 정규식이 아닌 구문 트리로 코드를 이해한다.

기능설명API
Syntax highlightingAST 기반 정확한 구문 강조:TSInstall <lang>
Incremental selection구문 노드 단위로 선택 확장/축소gnn, grn, grc
Folding구문 노드 기반 접기 (들여쓰기 아닌)foldmethod=expr + vim.treesitter.foldexpr()

기타 Neovim 전용

기능설명API
Lua APIVimscript 대신 Lua로 에디터 스크립팅vim.api, vim.fn, vim.keymap, vim.opt
Floating windows화면 어디든 팝업 윈도우vim.api.nvim_open_win()
vim.ui.select/input오버라이드 가능한 UI 프리미티브vim.ui.select(items, opts, cb)
vim.notify오버라이드 가능한 알림 시스템vim.notify("msg", vim.log.levels.WARN)
Async I/Olibuv 기반 비동기 작업vim.uv, vim.system()
Terminal버퍼 안에서 터미널 실행:terminal, Ctrl-\ Ctrl-n (나가기)
checkhealth내장 상태 진단:checkhealth

배포판 — Neovim 위에 올린 것

Neovim 0.5에서 LSP·Treesitter가 코어에 들어왔지만, 실제로 IDE처럼 쓰려면 lspconfig·mason·cmp·telescope·gitsigns 같은 플러그인을 직접 조립해야 한다. 이 조립 비용을 미리 해결해 둔 것이 배포판(distribution) 이다 — 플러그인 큐레이션 + 키맵 컨벤션 + 언어 팩을 한 묶음으로 제공한다. 대표적으로 LazyVim, NvChad, AstroNvim 이 현역 인기 배포판이다(2026-06 기준, GitHub 스타 14k~28k, 모두 활발히 유지보수 중). 별개로 kickstart.nvim 은 “한 파일짜리 출발점”을 복사해서 직접 수정하는 starter 템플릿으로, Neovim 공식 진영(nvim-lua org)이 미는 사실상 표준이다 — 배포판은 아니지만 같은 슬롯에서 자주 비교된다. 한때 인기였던 LunarVim 은 2025년 6월 이후 업데이트가 멈춰 현역 추천에서 빠진다. 각각의 차이는 Neovim 배포판/프레임워크 비교 참고.

이 글에서는 LazyVim 을 예시로 본다. 2023년 1월 Folke Lemaitre가 본인이 만든 플러그인 매니저 lazy.nvim 위에 출시했고, 기존 distro와 달리 “framework” 컨셉 — 사용자가 LazyVim 설정을 자기 dotfiles처럼 그대로 override·확장할 수 있는 구조를 지향한다.

플러그인 큐레이션 (LazyVim 예시)

Neovim의 LSP/Treesitter 기반 위에 실용적인 플러그인을 미리 조합해 놓은 것.

플러그인역할
nvim-lspconfig + mason.nvimLSP 서버 설치/연결 자동화
nvim-cmp / blink.cmp자동완성 엔진
conform.nvim포맷팅
nvim-lint린팅
telescope.nvim / fzf-lua퍼지 파인더
neo-tree.nvim파일 탐색기
which-key.nvim키맵 디스커버리
gitsigns.nvim + lazygit.nvimGit 통합
mini.nvimsurround, pairs, bufremove 등

Extras 시스템

:LazyExtras로 언어/도구 팩을 선택적으로 활성화. 각 extra가 LSP + 포맷터 + 린터 + DAP을 한 번에 설정한다.

키맵 레이어

Neovim API 위에 <leader> 기반 일관된 키맵을 제공.

동작실제 호출
<leader>ccCodeLens 실행vim.lsp.codelens.run()
<leader>caCode actionvim.lsp.buf.code_action()
<leader>crRenamevim.lsp.buf.rename()
<leader>cfFormatconform.nvim
<leader>cd라인 진단 floatvim.diagnostic.open_float()
<leader>ff파일 찾기telescope/fzf-lua
<leader>/전체 검색telescope live_grep
<leader>ggLazygitlazygit.nvim
<leader>e파일 탐색기neo-tree.nvim

<leader>cc로 CodeLens를 실행하지만, CodeLens 자체는 Neovim 내장이다. LazyVim은 키맵을 붙여준 것일 뿐.

요약

계층한 줄 요약
Vim모션, 오퍼레이터, 레지스터, quickfix, ex 명령 — 에디팅의 근간
Neovim내장 LSP, Treesitter, Lua API, floating window — IDE 기반
배포판플러그인 큐레이션 + 키맵 컨벤션 + 언어 팩 — 즉시 사용 가능한 IDE (LazyVim·NvChad·AstroNvim 등)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.