왜 completion 엔진이 중요해
Native LSP 가 데이터 줘: "여기 가능한 심볼들이고, 이 시그니처와 함께." Completion 엔진이 그 데이터 가져다가 사용 가능한 팝업으로 표시 — 제안 ranking, 스니펫 expand, buffer 단어와 파일 경로 통합, tab 동작 처리. Neovim 이 2026 에 두 강한 옵션 가져:
- nvim-cmp — 오랜 기본. 성숙, 거대한 plugin 생태계, 많은 source plugin.
- blink.cmp — 더 새로움 (2024+), Rust 백엔드, 더 빠르고 단순하게 디자인. 빠르게 parity 따라잡고 있음. 시작-perf 중요하면 시도 가치 있음.
이 레슨은 nvim-cmp 사용 — 한 번 설정하고 잊을 거면 더 안전한 선택. 나중에 blink.cmp 로 마이그레이션은 직관적; spec 모양 비슷.
뭘 와이어업해
- Completion 엔진 자체.
- Source — LSP, buffer 단어, 파일 경로, 스니펫.
- 스니펫 expander (
LuaSnip). - 팝업 안 키 매핑 (Tab 으로 navigate, Enter 로 confirm, Esc 로 dismiss).
- 클라이언트가 뭘 지원하는지 LSP 서버에 알리는 capabilities 객체 — 스니펫 completion, auto-import 등 활성화.
정신 모델
Completion 이 각 source 의 candidate 의 정렬, 필터, ranking 된 merge. nvim-cmp 가 매 source 쿼리, 제안 받음, ranking 룰 적용, 팝업 표시. 각 source 가 독립적 — Markdown 파일에 buffer 단어 비활성화, Python 파일에 LSP 우선 등.
LSP source 먼저 믿어. Buffer-단어 completion 이 산문에 좋지만 코드에 noisy; LSP 인식 제안이 type, scope, import 알아. 소스 파일에 LSP 를 buffer 위로 ranking; Markdown / commit message 에 역. nvim-cmp 의 filetype 별 config 가 이걸 인코드하는 방법.