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

kickstart.nvim 과 성능 팁

~13 min · neovim, kickstart, performance, lazy-loading

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

kickstart.nvim — 공식 starter

nvim-lua/kickstart.nvim 이 단일, 잘 코멘트된 init.lua (약 800 줄, 매 섹션 설명) 로 LSP, completion, treesitter, telescope, gitsigns, mini.nvim, sane keymap 셋업. Neovim core contributor 가 유지하고 Neovim 0.11+ 위해 update. 프레임워크 아냐 — 블랙박스로 import 하지 않고 읽고 수정하는 starter config.

Kickstart 언제 사용

  • Neovim 완전 신규고 5 분에 작동하는 셋업 원함.
  • 새 머신 셋업 중이고 config 처음부터 다시 derive 안 하고 싶음.
  • 누군가에게 Neovim 가르치고 알려진-good 베이스에 두고 싶음.

채택할 때 매 줄 읽어. 매 chunk 가 뭐 하고 왜 하는지 코멘트. 학습 config 로 다뤄, dependency 가 아니라.

성능 — 갖고 있는 budget

현대 Neovim + lazy.nvim 이 100ms 이하로 시작해야 해. 먼저 측정, 두 번째 최적화:

  • :Lazy profile — 총 시작 시간과 plugin 별 분석.
  • nvim --startuptime /tmp/startup.log — 밀리초 레벨 풀 시작 trace.

실제로 시간 절약하는 lazy-loading 패턴

좋은 lazy-loading 이 무거운 plugin 을 필요할 때까지 지연. 나쁜 lazy-loading 이 dependency 가 사용 전에 안 로드돼서 버그 만듦. 안전한 패턴은 plugin 의 사용에 매치되는 특정 trigger 에 lazy-load:

  • event = "BufReadPost" — 파일 열 때 로드. 편집 시간 plugin (gitsigns, treesitter, comment plugin) 에 사용.
  • event = "InsertEnter" — 첫 Insert mode 에 로드. Completion (nvim-cmp, autopairs) 에 사용.
  • event = "VeryLazy" — UI 준비 후 로드. 즉시 있을 필요 없는 plugin (which-key, lualine, nvim-surround) 에 사용.
  • cmd = "FugitiveStatus" — 특정 명령에 로드. 가끔 쓰는 무거운 plugin (fugitive, Mason) 에 사용.
  • ft = { "python", "lua" } — 특정 filetype 만 로드. 언어별 plugin 에 사용.
  • keys = { ... } — 키 처음 누를 때 로드.

1 년 내에 작성할 커스텀 Lua

Neovim API 가 충분히 풍부해서 대부분 개인 자동화가 5–15 줄 Lua. 계속 잡을 세 패턴:

  • vim.api.nvim_create_autocmd — 이벤트 (파일 열림, 저장, 커서 hold) 에 반응.
  • vim.api.nvim_create_user_command — 자기 :Command 정의.
  • vim.keymap.set + 커스텀 함수 — Lua 로 쓸 수 있는 뭐든 키에 바인드.

Neovim 로드맵 (앞 살펴보기)

  • Neovim 0.12 (진행 중)vim.pack 통한 내장 plugin 매니저, 멀티-커서 지원, 개선된 진행 메시지, first-class 스니펫 시스템 vim.snippet.
  • Neovim 0.13+ — 구조화된 동시성 (vim.async), 멀티 buffer 편집, 오늘 plugin 필요한 더 많은 native 기능.

최신 unstable 쫓지 마. 최신 stable (2026 의 0.11.x) 에 머물러; 0.12.0 떨어지고 plugin 생태계 따라잡으면 upgrade.

Endgame: 아무것도 outgrown 안 한 config. 1, 2 년 후 init.lua 가 갖는 모든 진짜 선호 반영. Plugin 은 부재 느껴서 추가; 매핑은 long form 두 번 입력해서 존재. 그게 손에 맞는 에디터. Vim+tmux 가 그 config 에서 평생 ROI 벌어.

Code

kickstart.nvim 시도 — 단일 명령·bash
# 먼저 기존 config 백업!
mv ~/.config/nvim ~/.config/nvim.bak 2>/dev/null
mv ~/.local/share/nvim ~/.local/share/nvim.bak 2>/dev/null

# kickstart.nvim 을 config 로 clone
git clone https://github.com/nvim-lua/kickstart.nvim ~/.config/nvim

# Neovim 열기 — 첫 실행 시 모든 거 자동 install
nvim
시작 profile·vim
:Lazy profile          " 대화형 — 가장 느린 plugin 골라

" 또는, 셸에서:
$ nvim --startuptime /tmp/startup.log +q
$ tail -50 /tmp/startup.log    " 가장 오른 숫자가 매 step 비용
커스텀 Lua — 직접 쓸 세 패턴·lua
-- Yank 한 텍스트 잠깐 하이라이트
vim.api.nvim_create_autocmd("TextYankPost", {
  callback = function()
    vim.highlight.on_yank({ higroup = "IncSearch", timeout = 200 })
  end,
})

-- 커스텀 :Format 명령
vim.api.nvim_create_user_command("Format", function()
  vim.lsp.buf.format({ async = true })
end, { desc = "Format buffer with LSP" })

-- 키에 diagnostic 토글
vim.keymap.set("n", "<leader>td", function()
  local enabled = vim.diagnostic.is_enabled()
  vim.diagnostic.enable(not enabled)
  vim.notify("Diagnostics " .. (enabled and "off" or "on"))
end, { desc = "Toggle diagnostics" })
Lazy-loading 레퍼런스 카드·lua
-- BufReadPost: 기존 파일 열릴 때
{ "plugin", event = { "BufReadPost", "BufNewFile" } }

-- InsertEnter: Insert mode 처음 들어갈 때
{ "plugin", event = "InsertEnter" }

-- VeryLazy: UI 완전 그려진 후 (lazy.nvim 이 박음)
{ "plugin", event = "VeryLazy" }

-- 특정 명령
{ "plugin", cmd = "DoTheThing" }

-- 특정 filetype
{ "plugin", ft = { "python", "lua" } }

-- 첫 키 누름
{ "plugin", keys = { { "<leader>x", "<cmd>X<CR>" } } }

External links

Exercise

현재 config 에서 :Lazy profile 실행 — 총 시작 시간과 가장 느린 plugin 셋 노트. Lazy-load OK 한 가장 느린 plugin 골라서 spec 에 event, cmd, 또는 keys trigger 추가. 다시 profile. 포인트는 가장-빠른-시작 게임 이기는 게 아니라; lazy-loading trigger 가 실제로 어떻게 작동하는지 느끼는 거. 보너스: kickstart.nvim 의 init.lua 위에서 아래까지 훑어 — 이 퀘스트의 매 레이어가 어떻게 맞는지 투어.

Progress

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

댓글 0

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

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