현대적이고 기능이 풍부한 Neovim 개발 환경 설정입니다.
- 🎨 세련된 UI: Material Design 테마와 커스텀 상태바
- 🚀 빠른 성능: Lazy 플러그인 로딩과 Treesitter 구문 분석
- 🔧 14개 언어 지원: LSP, 린터, 자동완성이 포함된 완전한 개발 환경
- 🤖 AI 코드 완성: GitHub Copilot 통합
- 📝 강력한 편집: 멀티 커서, 정렬, 자동 괄호, 스마트 주석
- 🔍 효율적인 탐색: 퍼지 파인더, 파일 탐색기, 버퍼 관리
이 설정은 계층적 문서 구조로 구성되어 있습니다:
- Core Configuration - 기본 설정 파일 설명
- 플러그인 설정 - 카테고리별로 정리된 플러그인 설정
- UI Plugins - 테마, 상태바, 버퍼라인 등
- Editing Plugins - 편집 도구 및 유틸리티
- Navigation - 파일 탐색기, 검색, 대시보드
- Core Development - LSP 서버, 린터, Treesitter
# Neovim 설치 (macOS)
brew install neovim
# 이 설정을 복제
git clone <your-repo> ~/.config/nvim
# Neovim 실행 - Lazy.nvim이 자동으로 플러그인 설치
nvim- Neovim을 시작하면 lazy.nvim이 자동으로 모든 플러그인을 설치합니다
- 설치가 완료되면
:checkhealth로 설정을 검증합니다 - 각 LSP 서버는 별도로 설치해야 합니다 (아래 언어 지원 참조)
Leader 키는 Space입니다
| 키바인딩 | 모드 | 기능 |
|---|---|---|
<leader>ff |
Normal | 파일 찾기 (퍼지 파인더) |
<leader>fg |
Normal | 텍스트 검색 (Grep) |
<leader>fb |
Normal | 버퍼 목록 |
<leader>e |
Normal | 파일 탐색기 토글 |
<C-_> |
Normal/Insert | 터미널 토글 |
gd |
Normal | 정의로 이동 (LSP) |
K |
Normal | 호버 문서 (LSP) |
gr |
Normal | 참조 찾기 (LSP) |
gcc |
Normal | 줄 주석 토글 |
<leader>a |
Normal/Visual | 텍스트 정렬 |
<M-l> |
Insert | Copilot 제안 수락 |
<leader>? |
Normal | 키바인딩 도움말 |
| 기능 | 플러그인 | 상태 |
|---|---|---|
| 컬러 테마 | material.nvim | ✅ |
| 상태바 | lualine.nvim | ✅ |
| 버퍼 탭 | bufferline.nvim | ✅ |
| 다목적 UI | snacks.nvim | ✅ |
| 파일 아이콘 | nvim-web-devicons | ✅ |
| 키바인딩 도움말 | which-key.nvim | ✅ |
| 기능 | 플러그인 | 상태 |
|---|---|---|
| 텍스트 정렬 | vim-easy-align | ✅ |
| 자동 괄호 | nvim-autopairs | ✅ |
| 스마트 주석 | Comment.nvim | ✅ |
| TODO 하이라이트 | todo-comments.nvim | ✅ |
| 멀티 커서 | vim-visual-multi | ✅ |
| 기능 | 구현 | 상태 |
|---|---|---|
| 퍼지 파인더 | snacks.nvim picker | ✅ |
| 파일 탐색기 | snacks.nvim explorer | ✅ |
| 버퍼 관리 | bufferline.nvim | ✅ |
| 빠른 파일 열기 | snacks.nvim quickfile | ✅ |
| 기능 | 구현 | 상태 |
|---|---|---|
| LSP 통합 | nvim-lspconfig | ✅ 14개 서버 |
| 구문 강조 | nvim-treesitter | ✅ 30+ 언어 |
| AI 완성 | copilot.lua | ✅ |
| 린팅 | nvim-lint | ✅ 9개 린터 |
| 기능 | 구현 | 상태 |
|---|---|---|
| 디버그 도구 | snacks.nvim debug | ✅ |
| 테스트 프레임워크 | - | ⬜ 예정 |
| 기능 | 구현 | 상태 |
|---|---|---|
| Git 도구 | - | ⬜ 예정 |
| 기능 | 구현 | 상태 |
|---|---|---|
| 통합 터미널 | snacks.nvim terminal | ✅ |
| 알림 시스템 | snacks.nvim notifier | ✅ |
| 대시보드 | snacks.nvim dashboard | ✅ |
14개 프로그래밍 언어를 완벽하게 지원합니다:
| 언어 | LSP 서버 | 린터 | Treesitter |
|---|---|---|---|
| Python | pylsp | ruff | ✅ python, ninja, rst |
| Java | jdtls | - | ✅ java |
| C/C++ | clangd | - | ✅ c, cpp |
| Go | gopls | golangcilint | ✅ go, gomod, gowork, gosum |
| JavaScript | ts_ls | biomejs | ✅ javascript |
| TypeScript | ts_ls | biomejs | ✅ typescript, tsx |
| Nix | nil_ls | statix, deadnix | ✅ nix |
| Lua | lua_ls | selene | ✅ lua |
| Terraform | terraformls | tflint | ✅ terraform, hcl |
| Bash | bashls | shellcheck | ✅ bash |
| HTML | html | - | ✅ html |
| CSS | cssls | - | ✅ css |
| JSON | jsonls | - | ✅ json, json5 |
| YAML | yamlls | yamllint | ✅ yaml |
| Docker | docker_compose_ls | hadolint | ✅ dockerfile |
각 언어 서버의 상세 설정 및 설치 방법은 LSP Configuration을 참조하세요.
- lazy.nvim - 현대적인 플러그인 매니저
- material.nvim - Material Design 컬러 스킴
- lualine.nvim - 빠르고 설정 가능한 상태바
- bufferline.nvim - LSP 진단이 포함된 버퍼라인
- snacks.nvim - 13가지 기능의 다목적 플러그인
- nvim-web-devicons - 파일 타입 아이콘
- which-key.nvim - 키바인딩 도움말 팝업
- vim-easy-align - 대화형 텍스트 정렬
- nvim-autopairs - 자동 괄호 쌍
- Comment.nvim - 스마트 주석 처리
- todo-comments.nvim - TODO/FIXME 하이라이트
- vim-visual-multi - 멀티 커서 편집
- nvim-treesitter - 구문 분석 및 강조
- nvim-lspconfig - LSP 설정 모음
- nvim-lint - 비동기 린팅 프레임워크
- copilot.lua - GitHub Copilot 통합
- plenary.nvim - 공통 Lua 유틸리티
- SchemaStore.nvim - JSON/YAML 스키마 저장소
~/.config/nvim/
├── init.lua # 설정 진입점 (core 모듈 로드)
├── lazy-lock.json # 플러그인 버전 잠금 파일
│
├── lua/
│ ├── config/
│ │ ├── clipboard.lua # OSC 52 클립보드 통합
│ │ ├── keybinds.lua # 전역 키바인딩
│ │ ├── lazy.lua # Lazy.nvim 플러그인 매니저 설정
│ │ ├── options.lua # Neovim 편집기 옵션
│ │ │
│ │ └── languages.lua # LSP 서버 설정 (14개)
│ │
│ └── plugins/ # 플러그인 설정 (18개)
│ ├── ui/ # 🎨 테마 & UI (2개)
│ │ ├── theme.lua # material.nvim + lualine.nvim
│ │ └── buffer.lua # bufferline.nvim
│ │
│ ├── editing/ # 📝 코드 편집 (4개)
│ │ ├── easy-align.lua # vim-easy-align
│ │ ├── autopairs.lua # nvim-autopairs
│ │ ├── comment.lua # Comment.nvim + todo-comments.nvim
│ │ └── vim-multiple-cursors.lua # vim-visual-multi
│ │
│ ├── navigation/ # 🔍 파일 탐색 (2개)
│ │ ├── snacks.lua # snacks.nvim (picker, explorer, dashboard)
│ │ └── which-key.lua # which-key.nvim
│ │
│ └── core/ # 🔧 개발 핵심 기능 (5개)
│ ├── lsp.lua # nvim-lspconfig
│ ├── treesitter.lua # nvim-treesitter
│ ├── lint.lua # nvim-lint
│ ├── copilot.lua # copilot.lua
│ └── trouble.lua # trouble.nvim + SchemaStore.nvim
│
└── README.md # 이 파일
- init.lua - 전체 설정의 진입점, core 모듈을 순차적으로 로드
- lua/config/options.lua - 라인 번호, 탭 간격, 검색 등 편집기 설정
- lua/config/keybinds.lua - 전역 키바인딩 (윈도우 분할, 기본 편집)
- lua/config/clipboard.lua - OSC 52 프로토콜 클립보드 지원
- lua/config/lazy.lua - Lazy.nvim 플러그인 매니저 부트스트랩
상세 설명은 Core Configuration을 참조하세요.
-
적절한 카테고리 디렉토리에 새
.lua파일 생성:- Theme/UI:
lua/plugins/ui/ - Editing:
lua/plugins/editing/ - Navigation:
lua/plugins/navigation/ - Core Development:
lua/plugins/core/
- Theme/UI:
-
플러그인 스펙을 반환하는 형식으로 작성:
return {
"author/plugin-name",
event = "VeryLazy", -- 선택사항: lazy loading
opts = {
-- 플러그인 옵션
},
keys = {
{ "<leader>x", "<cmd>PluginCommand<cr>", desc = "Plugin action" }
}
}- Neovim 재시작 - Lazy가 자동으로 인식하고 설치
Neovim에서 :Lazy를 입력하여 플러그인 매니저 UI를 엽니다:
I- 플러그인 설치U- 업데이트X- 제거S- 동기화 (설치 + 업데이트 + 정리)C- 변경 사항 확인L- 로그 보기
lua/config/lsp/디렉토리에 새<server>.lua파일 생성- 서버 설정 반환:
return {
name = "server_name",
cmd = { "language-server-command" },
filetypes = { "filetype1", "filetype2" },
settings = {
-- 서버별 설정
}
}lua/config/plugins/lspconfig.lua에서 자동으로 로드됨
LSP 설정 가이드는 LSP Configuration을 참조하세요.
lua/config/plugins/material.lua 파일에서 스타일 변경:
style = "darker", -- lighter, darker, oceanic, palenight, deep ocean- 전역 키바인딩:
lua/config/keybinds.lua - 플러그인별 키바인딩: 각 플러그인 파일의
keys섹션
lua/config/options.lua에서 설정 변경:
vim.opt.tabstop = 4 -- 탭 간격
vim.opt.number = true -- 라인 번호 표시
vim.opt.wrap = false -- 줄 바꿈 비활성화- 언어 서버가 설치되었는지 확인:
which <server-command> # 예: which pylsp- LSP 로그 확인:
:LspLog- 건강 체크 실행:
:checkhealth lsp:Lazy health # 플러그인 상태 확인
:Lazy sync # 플러그인 동기화:TSInstallInfo # 설치된 파서 확인
:TSUpdate # 파서 업데이트
:TSInstall <language> # 특정 파서 설치- 총 플러그인 수: 18개
- LSP 서버: 14개
- 린터: 9개
- Treesitter 파서: 30개 이상
- 커스텀 키바인딩: 50개 이상
- 지원 언어: 14개
이슈와 개선 제안은 언제든 환영합니다!
이 설정은 개인 사용을 위한 것입니다. 자유롭게 사용하고 수정하세요.
Made with ❤️ using Neovim