neovim config

July 24, 2026 · View on GitHub

English | 简体中文 | 日本語 | Français | 한국어

Lua로 작성하고 lazy.nvim으로 관리하는 개인용 모던 Neovim 설정입니다. 네이티브 LSP, Treesitter, Telescope, Catppuccin 테마를 기본 포함하며 웹 및 Python 개발에 맞춰 튜닝했습니다.

screenshot

특징

  • 지연 로딩 — lazy.nvim으로 플러그인을 관리하며, 재현 가능한 설치를 위해 lazy-lock.json을 커밋합니다
  • 🧠 네이티브 LSPnvim-lspconfig + mason.nvim, 서버와 도구를 자동 설치
  • 자동완성blink.cmp, 빠르고 모던한 자동완성 엔진
  • 🌳 Treesitter — 구문 강조와 점진적 선택, 그리고 Treesitter 기반 텍스트 오브젝트
  • 🔭 Telescope — 파일, 실시간 grep, LSP 심볼, todo에 대한 퍼지 검색
  • 🎨 Catppuccin 테마, lualine 상태 표시줄, alpha 대시보드, which-key 힌트, 들여쓰기 가이드
  • 🧹 저장 시 포맷팅과 lintconform.nvim(prettier / stylua / isort / black)과 nvim-lint(eslint_d / pylint)
  • 💾 자동 세션 — 프로젝트 디렉터리별로 작업 공간을 복원
  • 🔧 gitsignslazygit을 통한 Git 통합

요구 사항

  • Neovim 0.10 이상
  • git
  • Nerd Font(아이콘용. 터미널에 설정되어 있다고 가정합니다)
  • 트루컬러 터미널(iTerm2, WezTerm, Kitty 등) — termguicolors에 필요
  • ripgrep(rg) — Telescope 실시간 grep에 필요
  • Node.js — 여러 LSP 서버와 포맷터(prettier 등)가 의존

설치

git clone git@github.com:dofy/nvim.git ~/.config/nvim

그런 다음 Neovim을 실행합니다:

nvim

첫 실행 시 lazy.nvim이 자체적으로 부트스트랩하여 모든 플러그인을 자동으로 설치합니다. LSP 서버와 도구는 Mason이 백그라운드에서 설치합니다.

  • :Lazy로 플러그인 설치 / 업데이트 / 정리
  • :Mason으로 LSP 서버, 포맷터, linter 관리
  • <Space>(leader 키)를 누르고 잠시 기다리면 사용 가능한 키바인딩이 표시됩니다
  • g?로 키바인딩 화면 보기

구조

init.lua
├── lua/custom/core/
│   ├── options.lua     # vim.opt 설정
│   └── keymaps.lua     # 기본 키맵 (leader = <Space>)
├── lua/custom/lazy.lua # lazy.nvim 부트스트랩 + 플러그인 임포트
└── lua/custom/plugins/
    ├── init.lua        # 기본 의존성 (plenary, vim-tmux-navigator)
    ├── lsp/
    │   ├── mason.lua       # Mason + mason-lspconfig + 도구 설치기
    │   └── lspconfig.lua   # nvim-lspconfig + LspAttach 키맵
    └── *.lua           # 플러그인당 파일 하나

플러그인을 추가하려면 lua/custom/plugins/<name>.lua를 만들어 lazy.nvim의 spec 테이블을 반환하면 됩니다 — 자동으로 임포트됩니다.

플러그인

분류플러그인
자동완성blink.cmp
LSPnvim-lspconfig, mason.nvim, mason-lspconfig, mason-tool-installer
구문nvim-treesitter, nvim-treesitter-textobjects
파일과 검색nvim-tree, telescope.nvim
포맷팅과 lintconform.nvim, nvim-lint
UIcatppuccin, lualine, alpha, dressing, indent-blankline, which-key
편집autopairs, substitute.nvim, todo-comments, trouble.nvim
Gitgitsigns, lazygit
세션과 기타auto-session, wakatime

키맵

leader 키는 <Space>입니다. 아래는 빠른 참고용입니다. <leader> 또는 g를 누르고 잠시 기다리면 which-key가 전체 목록을 표시합니다.

창과 탭

동작
<leader>sv / <leader>sh수직 / 수평 분할
<leader>se / <leader>sx분할 균등화 / 분할 닫기
<leader>to / <leader>tx탭 열기 / 닫기
<leader>tn / <leader>tp다음 / 이전 탭
<leader>tf현재 버퍼를 새 탭에서 열기
<leader>nh검색 강조 지우기
jk(삽입 모드)삽입 모드 종료

검색(Telescope)과 탐색기

동작
<leader>ff현재 디렉터리에서 파일 찾기
<leader>fr최근 파일
<leader>fs현재 디렉터리에서 실시간 grep
<leader>fc커서 아래 문자열 grep
<leader>fttodo 찾기
<leader>ee파일 탐색기 토글
<leader>ef현재 파일에 대해 탐색기 토글
<leader>ec / <leader>er탐색기 접기 / 새로고침

LSP

동작
gd / gR정의 / 참조
gD / gi / gt선언 / 구현 / 타입 정의
K호버 문서
<leader>ca코드 액션
<leader>rn심볼 이름 변경
<leader>d / <leader>D라인 / 파일 진단
[d / ]d이전 / 다음 진단
<leader>rsLSP 재시작

편집

동작
s + 모션 / ss / S모션 / 라인 / 라인 끝까지 치환
s(visual)선택 영역 치환
<leader>fo파일 또는 범위 포맷
<leader>lllint 실행
<leader>wr / <leader>ws세션 복원 / 저장

LSP와 포맷팅

LSP 서버(mason-lspconfig로 자동 설치): ts_ls, denols, html, cssls, tailwindcss, svelte, lua_ls, graphql, emmet_ls, prismals, pyright.

도구(mason-tool-installer로 자동 설치): prettier, stylua, isort, black, pylint, eslint_d.

포맷팅conform.nvim, 저장 시 실행(수동: <leader>fo):

  • JS / TS / CSS / HTML / JSON / YAML / Markdown / GraphQL → prettier
  • Lua → stylua(2칸 들여쓰기)
  • Python → isort + black

Lintnvim-lint, 진입 / 저장 / 삽입 모드 종료 시 실행(수동: <leader>ll):

  • JS / TS / Svelte → eslint_d
  • Python → pylint

라이선스

MIT