Neovim 0.10까지는 nvim-lspconfig에 서버를 직접 깔아 붙이는 게 필수였어. 0.11이 native API를 들여왔어. vim.lsp.config()로 서버를 선언하고 vim.lsp.enable()로 켜는 방식이야. 덕분에 기본 LSP 설정이 다섯 줄이면 끝나. 복잡한 구성에는 여전히 nvim-lspconfig가 도움이 되지만, 평범한 경우엔 필요 없어.
"LSP"가 뭘 해주냐면
정의로 뛰기 (대부분의 설정에서 gd, 또는 vim.lsp.buf.definition()).
hover 문서 보기 — K.
references 찾기 — 그 심볼이 쓰인 자리 전부.
rename — 프로젝트 전체에서 심볼 이름 바꾸기.
code action — 언어 서버가 제안하는 빠른 수정, 자동 import, 리팩터링.
diagnostic — 에러랑 경고를 코드 옆에 바로.
document symbol — 파일 개요.
Insert mode에서 함수 시그니처 도움말.
기본 매핑 (Neovim 0.11+)
아무 설정 없이도 서버가 붙는 순간부터 먹혀. grn은 rename, grr은 references, gri는 implementation, gra는 code action, gO는 document symbol, K는 hover, Ctrl-S는 시그니처 도움말 (Insert mode), [d / ]d는 이전과 다음 diagnostic이야. 외우는 법은 이래. g는 "go", r은 "references", n은 "name (rename)".
서버 설정하기
서버 실행 파일을 먼저 깔고 (패키지 매니저든 brew든 cargo든 npm이든, 아니면 mason.nvim으로) config에 선언하면 돼. 아래 code block에 자주 쓰는 세 개를 담아뒀어.
Mason — 서버용 패키지 매니저 (선택)
mason.nvim은 Neovim 안에서 :Mason으로 LSP 서버, formatter, linter, DAP adapter를 깔아줘. 0.11+에서는 선택 사항이야. brew나 apt로 직접 깔아도 되거든. 다만 머신을 여러 대 오갈 때는 편해.
기준은 서버야. Neovim의 LSP 클라이언트는 Python도 TypeScript도 몰라. 그냥 LSP 프로토콜로 가리키는 서버에 말을 걸 뿐이야. completion이나 diagnostic이 이상하면 버그는 거의 항상 서버 설정에 있지 Neovim에 있지 않아. Neovim 문서 말고 그 서버 문서를 읽어.
K " hover documentation
grn " 심볼 rename
grr " references 찾기
gri " implementation 으로
gra " code action
gO " document symbol (outline)
Ctrl-S " signature help (Insert mode)
[d ]d " 이전 / 다음 diagnostic
Ctrl-W d " 커서에 diagnostic float
옵셔널 — 서버 install 위한 Mason·lua
-- lazy.nvim plugin spec에 추가
{
"williamboman/mason.nvim",
cmd = "Mason",
build = ":MasonUpdate",
opts = {},
}
-- 그 다음 :Mason 으로 UI 열어 서버 install
매일 쓰는 언어를 하나 골라 (Python, JavaScript, Lua). LSP 서버를 깔아 (pip install pyright, npm install -g typescript-language-server typescript, brew install lua-language-server 같은 식으로). 거기 맞는 vim.lsp.config랑 vim.lsp.enable 줄을 init.lua에 넣어. 프로젝트 파일을 열고 K (hover), grn (rename), gra (code action) 를 시험해봐. :checkhealth vim.lsp로 서버가 붙었는지도 확인하고.
Progress
Progress is local-only — sign in to sync across devices.