Post

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

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

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

Vim의 기본 기능, Neovim이 추가한 기능, LazyVim이 올린 계층을 구분해서 정리한다. “이 기능이 어디서 온 건지” 헷갈릴 때 참고용.

Vim — 기본 제공

에디터의 근간. 모션, 오퍼레이터, 레지스터 등 시간이 지나도 변하지 않는 것들.

기능설명명령/키
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 위에 추가된 것

내장 LSP 클라이언트, Treesitter, Lua API 등. 플러그인 없이도 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

LazyVim — Neovim 위에 올린 것

설정 프레임워크. 플러그인 조합 + 키맵 컨벤션 + extras 시스템을 제공한다.

플러그인 큐레이션

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 기반
LazyVim플러그인 큐레이션 + extras + <leader> 키맵 — 즉시 사용 가능한 IDE
This post is licensed under CC BY 4.0 by the author.