그동안 neovim 에서 vim-plug 으로 각 종 플러그인들을 설치해 사용하고 있었는데, Lua 언어를 neovim에서 공식적으로 지원하면서 LazyVim 같은 플러그인을 쓰는 곳이 많아졌다.
그래서, 사용법을 익히기위해 ChatGPT 의 힘을 빌려 알아보았다.
나의 말:
요새 neovim에서 plugin을 설치할때 vim-plug 대신 다른 걸 쓰는 것 같던대 그 방식에 대해 알려줘
ChatGPT의 말:
맞아요. 요즘 Neovim에서는 vim-plug
대신 Lazy.nvim이나 packer.nvim, folke/lazy.nvim 같은 Lua 기반의 플러그인 매니저를 더 많이 사용해요. 특히 Neovim이 Lua를 공식적으로 지원하면서, Lua 기반 설정이 대세가 되었고, 그 중 가장 많이 쓰이는 건 Lazy.nvim이에요.
🔹 Lazy.nvim이란?
folke/lazy.nvim
: Neovim 전용의 고성능 Lua 기반 플러그인 매니저
- 지연 로딩 (lazy loading), 조건부 로딩, 디펜던시 관리 등을 편리하게 처리 가능
- 속도도 빠르고 구조화도 잘 되어 있어서 최근에 많이 채택되고 있어요.
🔹 Lazy.nvim의 주요 특징
- 지연 로딩 지원: 이벤트(
BufRead
, InsertEnter
, VeryLazy
등) 기반으로 플러그인 로딩 시점을 제어
- 디펜던시 관리: 플러그인 간 의존성 쉽게 연결 가능
- 설정과 코드 분리 용이: 깔끔한 설정 구조
- 자동 설치 지원: Lazy.nvim이 없으면 자동 설치하게 할 수 있음
🔹 기본 설치 방법 (Step-by-step)
1. Lazy.nvim 설치
-- init.lua 또는 lua/plugins/init.lua에 삽입
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git", "clone", "--filter=blob:none",
"https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath
})
end
vim.opt.rtp:prepend(lazypath)
2. 플러그인 리스트 정의
require("lazy").setup({
-- 예시 플러그인들
{
"nvim-telescope/telescope.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
cmd = "Telescope",
},
{
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
event = { "BufReadPost", "BufNewFile" },
},
{
"neovim/nvim-lspconfig",
event = { "BufReadPre", "BufNewFile" },
},
})
🔹 Lazy.nvim과 vim-plug 비교
항목 |
vim-plug |
Lazy.nvim |
언어 |
Vimscript |
Lua |
지연 로딩 |
일부 지원 |
매우 정교하게 지원 (이벤트 기반 등) |
디펜던시 관리 |
직접 수동 관리 |
자동 의존성 관리 |
성능 |
느릴 수 있음 |
매우 빠름 |
Neovim 친화도 |
낮음 |
매우 높음 |
🔹 참고 링크
원하면 LazyVim
(Lazy.nvim 기반의 pre-configured Neovim 환경) 세팅 가이드도 따로 만들어줄게.
질문 더 있어? 😄
나의 말:
neovim, lazyvim 설치부터 플러그인들을 어떻게 추가 설치하고 관리하는지 step-by-step으로 알려줘
ChatGPT의 말:
좋아, 그럼 Neovim + LazyVim 설치부터 플러그인 추가 및 관리 방법까지 전체 과정을 단계별로 설명해줄게.
(기본적으로 macOS/Linux 기준이고, Windows WSL에서도 거의 동일하게 적용 가능해!)
✅ 0단계: 사전 요구사항
- Neovim 0.9 이상 (가능하면 0.10 권장)
- Git 설치됨
- nerd font (예:
Hack Nerd Font
) 설치 — GUI 글꼴 이슈 방지
ripgrep
, fd
, node
, npm
, python3
, pip
등도 추천 설치 (일부 플러그인에 필요)
✅ 1단계: LazyVim 템플릿 클론
git clone https://github.com/LazyVim/starter ~/.config/nvim
~/.config/nvim
디렉토리를 기존에 사용 중이었다면 백업 후 삭제하는 게 좋아.
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
mv ~/.local/state/nvim ~/.local/state/nvim.bak
mv ~/.cache/nvim ~/.cache/nvim.bak
✅ 2단계: Neovim 실행하여 자동 설치 확인
- 최초 실행 시
lazy.nvim
, 플러그인들 자동 설치됨
- 다 설치되면
:checkhealth
명령어로 환경 확인
✅ 3단계: LazyVim 기본 구조 이해
LazyVim은 Lua 기반으로 구성됨.
주요 디렉토리/파일
~/.config/nvim/
├── init.lua --> LazyVim 부트스트랩
├── lua/
│ ├── config/ --> 옵션, 키맵, 자동 명령 등
│ ├── plugins/ --> 플러그인 설정들
│ └── lazyvim/ --> (외부) LazyVim core
✅ 4단계: 플러그인 추가 방법
예: github/copilot.vim
플러그인 추가하기
- 아래 경로에 Lua 파일 생성:
~/.config/nvim/lua/plugins/copilot.lua
- 내용 추가:
return {
"github/copilot.vim",
event = "InsertEnter",
}
- Neovim 재실행 또는
:Lazy reload
→ 자동 설치됨
✅ 5단계: 플러그인 설정 추가
예: telescope.nvim
에 설정 추가하려면
return {
"nvim-telescope/telescope.nvim",
opts = {
defaults = {
layout_strategy = "vertical",
},
},
}
또는 LazyVim에서 이미 쓰고 있는 플러그인의 설정을 오버라이드하려면:
return {
"nvim-telescope/telescope.nvim",
opts = function(_, opts)
opts.defaults.layout_strategy = "vertical"
end,
}
✅ 6단계: 플러그인 관리 명령어
명령어 |
설명 |
:Lazy |
Lazy.nvim UI (상태, 설치, 삭제 등) |
:Lazy update |
모든 플러그인 업데이트 |
:Lazy sync |
설치/삭제 적용 |
:Lazy reload |
설정 리로드 |
:Lazy clean |
사용하지 않는 플러그인 제거 |
✅ 7단계: 자주 쓰는 추천 플러그인 예시
return {
-- 파일 탐색기
{ "nvim-tree/nvim-tree.lua", config = true, cmd = "NvimTreeToggle" },
-- Git UI
{ "lewis6991/gitsigns.nvim", event = "BufReadPre", config = true },
-- LSP UI
{ "glepnir/lspsaga.nvim", event = "LspAttach", config = true },
-- 코드 포맷터
{ "stevearc/conform.nvim", config = true },
-- Auto pairs
{ "windwp/nvim-autopairs", event = "InsertEnter", config = true },
}
✅ 8단계: 추천 설정 옵션 (lua/config/options.lua
)
vim.opt.relativenumber = true
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.expandtab = true
✅ 정리: 전체 흐름 요약
git clone
으로 LazyVim 템플릿 설치
nvim
실행해서 자동 세팅
lua/plugins/*.lua
에 플러그인 추가
:Lazy
로 관리
opts
, keys
, event
옵션으로 유연한 설정
원하면 내가 추천하는 개발자용 LazyVim 플러그인 세트도 따로 정리해줄게.
또는 지금 사용 중인 config 파일 분석해줘도 가능!
필요한 거 있으면 말만 해 😎
나의 말:
추천하는 LazyVim 플러그인 세트가 뭐야? 일단 Copliot 은 설치하고싶어
ChatGPT의 말:
좋아! 그럼 LazyVim을 쓸 때 추천하는 개발자용 플러그인 세트를 소개할게.
Copilot은 기본 세팅부터 바로 알려주고, 그 외에도 Neovim을 더 강력한 개발 도구로 만들어주는 플러그인들 위주로 정리해봤어.
✅ 1. GitHub Copilot 설정
🔧 설치 방법 (Lazy.nvim 방식)
~/.config/nvim/lua/plugins/copilot.lua
파일 생성하고 아래처럼 작성:
return {
"github/copilot.vim",
event = "InsertEnter",
config = function()
vim.g.copilot_no_tab_map = true
vim.g.copilot_assume_mapped = true
vim.api.nvim_set_keymap("i", "<C-l>", 'copilot#Accept("<CR>")', {
expr = true,
silent = true,
noremap = true,
})
end,
}
<C-l>
(Ctrl + L) 키로 자동완성 수락 가능
InsertEnter
이벤트로 입력 모드 진입 시 로드됨
:Copilot auth
로 GitHub 계정 인증 필요 (최초 1회)
✅ 2. LazyVim 추천 플러그인 세트 🔥
LSP, Git, 생산성, UI, 파일 탐색, 편집기능 중심으로 추림
🧠 LSP & 코딩 지원
Plugin |
설명 |
neovim/nvim-lspconfig |
LSP 설정 (기본 내장됨) |
hrsh7th/nvim-cmp |
자동완성 엔진 (기본 내장) |
L3MON4D3/LuaSnip |
코드 스니펫 |
onsails/lspkind.nvim |
자동완성 아이콘 꾸미기 |
stevearc/conform.nvim |
코드 포맷터 자동 실행 |
🔍 검색 & 탐색
Plugin |
설명 |
nvim-telescope/telescope.nvim |
강력한 검색 기능 |
nvim-tree/nvim-tree.lua |
파일 트리 탐색기 |
nvim-lualine/lualine.nvim |
상태바 꾸미기 |
folke/trouble.nvim |
LSP 에러 탐색기 (Telescope 연동 가능) |
🔨 Git & 버전관리
Plugin |
설명 |
lewis6991/gitsigns.nvim |
Git diff 표시 |
tpope/vim-fugitive |
강력한 Git 명령어 연동 |
sindrets/diffview.nvim |
Git diff UI |
ruifm/gitlinker.nvim |
GitHub 링크 복사 |
💻 편집 기능 강화
Plugin |
설명 |
windwp/nvim-autopairs |
괄호 자동 닫기 |
numToStr/Comment.nvim |
빠른 주석 토글 |
tpope/vim-surround |
괄호/따옴표 감싸기 편리 |
ggandor/leap.nvim |
빠른 커서 점프 |
folke/zen-mode.nvim |
집중 모드 |
🌈 테마 & UI
Plugin |
설명 |
folke/tokyonight.nvim |
고급 테마 |
catppuccin/nvim |
부드러운 테마 |
nvim-notify + rcarriga/nvim-notify |
알림 UI 개선 |
folke/noice.nvim |
UI/입출력 개선 (message, cmdline 등) |
🧩 설치 예시 - Comment.nvim
파일: ~/.config/nvim/lua/plugins/comment.lua
return {
"numToStr/Comment.nvim",
event = "VeryLazy",
config = function()
require("Comment").setup()
end,
}
📦 팁: 여러 플러그인 한 파일에 묶는 법
-- ~/.config/nvim/lua/plugins/dev-essentials.lua
return {
{ "numToStr/Comment.nvim", config = true, event = "VeryLazy" },
{ "windwp/nvim-autopairs", config = true, event = "InsertEnter" },
{ "tpope/vim-surround", event = "VeryLazy" },
}
더 도와줄까?
- 지금 쓰고 있는 설정 공유해주면 개선 포인트 추천해줄 수 있고,
- Rust, Python, Web 개발자용 전용 플러그인 세트도 정리해줄 수 있어!
필요한 플러그인 카테고리 알려줘 😄
(Copilot 인증에서 막혔다거나 설정 반영이 안 되는 것도 도와줄 수 있어)