C.W.K.
Stream
Lesson 04 of 04 · published

Neovim 0.11+ Native LSP

~16 min · neovim, lsp, code-intelligence

Level 0갇힌 자
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

nvim-lspconfig 없는 코드 인텔리전스

Neovim 0.10 까지는 nvim-lspconfig + 수동 설치된 서버 필요했어. Neovim 0.11 이 native API — vim.lsp.config() 로 서버 선언, vim.lsp.enable() 로 켜기 — 도입해서 기본 LSP 설정이 5 줄 일이 됐어. 복잡한 셋업엔 여전히 nvim-lspconfig 도움 되지만, 흔한 경로엔 필요 없어.

"LSP" 가 주는 것

  • Definition 으로 점프 (hover 에 K, 대부분 셋업의 gd, 또는 vim.lsp.buf.definition()).
  • References 찾기 — 심볼 사용된 모든 자리.
  • Rename — 프로젝트 전체에서 심볼 refactor.
  • Code action — 언어 서버가 제안하는 quick fix, auto-import, refactor.
  • Diagnostic — 인라인 에러와 warning.
  • Document symbol — 파일 outline.
  • Insert mode 의 signature help.

기본 매핑 (Neovim 0.11+)

설정 없이도 서버 attach 되자마자 작동: grn rename, grr references, gri implementation, gra code action, gO document symbol, K hover, Ctrl-S signature help (Insert mode), [d / ]d 이전 / 다음 diagnostic. Mnemonic — g for "go", r for "references", n for "name (rename)."

서버 설정

서버 binary install (패키지 매니저, brew, cargo, npm 등으로, 또는 mason.nvim 으로) 하고 config 에 선언. 인기 있는 세 개:

Mason — 서버용 옵셔널 패키지 매니저

mason.nvim 이 Neovim 안에서 :Mason 으로 LSP 서버, formatter, linter, DAP adapter install. 0.11+ 에선 옵셔널 — brew/apt 로 직접 install 가능 — 머신 사이 점프할 때 편리.

서버가 진실의 원천. Neovim LSP 클라이언트는 Python 이나 TypeScript 모름 — 그냥 LSP 프로토콜로 가리키는 어떤 서버든 말 걸어. Autocomplete 나 diagnostic 이 이상하게 느껴지면, 버그가 거의 항상 서버 설정에 있어, Neovim 에 있는 거 아냐. 서버 docs 읽어, Neovim 의 거 아니라.

Code

흔한 LSP 서버 세 개 설정 — Neovim 0.11+·lua
-- Lua 언어 서버 (Neovim config 자체 편집용)
vim.lsp.config("lua_ls", {
  cmd = { "lua-language-server" },
  root_markers = { ".luarc.json", ".git" },
  settings = {
    Lua = {
      runtime = { version = "LuaJIT" },
      workspace = {
        checkThirdParty = false,
        library = vim.api.nvim_get_runtime_file("", true),
      },
      diagnostics = { globals = { "vim" } },
    },
  },
})

-- Python
vim.lsp.config("pyright", {
  cmd = { "pyright-langserver", "--stdio" },
  root_markers = { "pyproject.toml", "setup.py", "setup.cfg", ".git" },
})

-- TypeScript / JavaScript
vim.lsp.config("ts_ls", {
  cmd = { "typescript-language-server", "--stdio" },
  root_markers = { "tsconfig.json", "package.json", ".git" },
})

-- 켜기
vim.lsp.enable({ "lua_ls", "pyright", "ts_ls" })
기본 LSP 키맵 (Neovim 0.11+) — 이미 박힘·vim
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
Sane diagnostic 표시·lua
vim.diagnostic.config({
  virtual_text = { prefix = "●", spacing = 2 },
  signs = true,
  underline = true,
  update_in_insert = false,   -- 타이핑하며 diagnostic 안 흔들림
  severity_sort = true,
  float = { border = "rounded", source = true },
})

External links

Exercise

매일 쓰는 언어 하나 골라 (Python, JavaScript, Lua). LSP 서버 install (예: 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) 테스트. :LspInfo 로 서버 attach 됐는지 확인.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.