lazy.nvim 플러그인 관리자 설정하기

개요

Neovim의 plugin 관리자는 vim-plug, packer와 같이 여러가지가 있는데 모던 형태의 사용하기 쉬운 lazy.vim을 사용해 보려고 합니다.

설치

기본적으로 lazy.vim을 사용하기 위해서는 Neovim >= 0.8.0 이상 버전과 Git >= 2.19.0 이상 버전이 설치되어 있어야 합니다.

설치된 Neovim과 Git 버전을 확인 합니다.

$> nvim -version
NVIM v0.8.3
Build type: Release
LuaJIT 2.1.0-beta3
Compiled by builduser

Features: +acl +iconv +tui
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/usr/share/nvim"

Run :checkhealth for more info

$> git -v
git version 2.39.2

lazy.vim을 사용하기 위해서 쉬운 사용을 위해 LazyVim Starter를 제공하기 때문에 쉽게 기본설정을 할 수 있습니다.

LazyVim Starter를 이용해 몇 가지 설정만 변경한 기본 설정으로 Neovim을 실행하면 아래 화면처럼 초기화가 됩니다.

neovim_with_lazy_init

Configuration

starter(nvim-with-lazy)의 기본 구조는 다음과 같습니다.

$> tree nvim-with-lazy
nvim-with-lazy
├── init.lua
└── lua
    ├── config
    │   ├── autocmds.lua
    │   ├── keymaps.lua
    │   ├── lazy.lua
    │   └── options.lua
    └── plugins
        └── init.lua

init.lua

-- bootstrap lazy.nvim, LazyVim and your plugins
require "config.lazy"

require에서 사용된 Lua 파일은 lua/config/lazy.lua 파일을 의미합니다.

lua/config/lazy.lua

-- Install lazy.nvim
-- https://github.com/folke/lazy.nvim
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)

-- Configure lazy.nvim
require("lazy").setup("plugins", {
 defaults = { lazy = true, version = nil },
 install = { missing = true, colorscheme = { "tokyonight", "gruvbox" } },
 checker = { enabled = true },
 performance = {
   rtp = {
     disabled_plugins = {
       "gzip",
       "matchit",
       "matchparen",
       "netrwPlugin",
       "tarPlugin",
       "tohtml",
       "tutor",
       "zipPlugin",
     },
   },
 },
})
vim.keymap.set("n", "<leader>z", "<cmd>:Lazy<cr>", { desc = "Manage Plugins" })

lua/plugins/init.lua

Lua를 이용해 설정하면 기본적으로 plugins 폴더의 init.lua 파일을 초기화하는데 내용은 다음과 같습니다.

LazyVim Starter에는 기본으로 포함되어 있지 않지만, 평소에 사용하던 기본적인 플러그인 몇 개(plenary.nvim, numb.nvim, indent-blankline.nvim)를 추가하였습니다.

return {
  "nvim-lua/plenary.nvim",
  { "nacro90/numb.nvim", event = "BufReadPre", config = true },
  {
    "lukas-reineke/indent-blankline.nvim",
    event = "BufReadPre",
    config = true,
  },
}

추가로 autocmds.lua, keymaps.lua, options.lua 템플릿을 설정 할 수 있습니다.

lua/config/autocmds.lua

-- Autocmds are automatically loaded on the VeryLazy event
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
-- Add any additional autocmds here

lua/config/keymaps.lua

-- Keymaps are automatically loaded on the VeryLazy event
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
-- Add any additional keymaps here

lua/config/options.lua

-- Options are automatically loaded before lazy.nvim startup
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
-- Add any additional options here

Shell Script 만들기

이미 사용하고 있던 Neovim이 있다면 새로 적용하는 환경이 충돌이 발생하기 때문에 별로도 분리하는 Shell Script를 만들어 확인 후 적용하는 환경을 만듭니다.

install.sh는 기존에 동일한 설정이 있으면 삭제하고 stow를 통해 링크를 만들어 주는 스크립트 입니다.

install.sh

#!/usr/bin/env sh

export NVIM_LAZY=~/.config/nvim-lazy

rm -rf $NVIM_LAZY

mkdir -p $NVIM_LAZY/share
mkdir -p $NVIM_LAZY/nvim

stow --restow --target=$NVIM_LAZY/nvim .

nv.sh는 설정된 환경으로 Neovim을 실행할 수 있는 스크립트 입니다.

nv.sh

#!/usr/bin/env sh

export NVIM_LAZY=~/.config/nvim-lazy

alias nv='XDG_DATA_HOME=$NVIM_LAZY/share XDG_CONFIG_HOME=$NVIM_LAZY/nvim'
export nv

nv $1

다음 처럼 사용 할 수 있습니다. PATH에 추가하거나 nv 설정을 환경변수에 추가하여 사용 할 수도 있습니다.

$> ./nv.sh init.lua

ColorScheme

lua/plugins/colorscheme/ 폴더에 설정을 추가해서 ColorScheme을 적용할 수 있습니다.

Neovim에서는 ColorScheme를 적용하기 전에 Styler 플러그인을 통해 파일 타입별로 다른 ColorScheme을 적용할 수 있습니다.

ColorScheme은 여러가지가 있지만 평소 사용했던 ColorScheme은 gruvbox, tokyonight, catppuccin 정도가 있습니다.

다른 ColorScheme도 많이 있으니 원하는 걸 선택해 적용하시면 됩니다.

lua/plugins/colorscheme/init.lua 예제 파일 입니다.

return {
  {
    "folke/styler.nvim",
    event = "VeryLazy",
    config = function()
      require("styler").setup {
        themes = {
          markdown = { colorscheme = "gruvbox" },
          help = { colorscheme = "catppuccin-mocha", background = "dark" },
        },
      }
    end,
  },
  {
    "folke/tokyonight.nvim",
    lazy = false,
    priority = 1000,
    config = function()
      local tokyonight = require "tokyonight"
      tokyonight.setup { style = "storm" }
      tokyonight.load()
    end,
  },
  {
    "catppuccin/nvim",
    lazy = false,
    name = "catppuccin",
    priority = 1000,
  },
  {
    "ellisonleao/gruvbox.nvim",
    lazy = false,
    priority = 1000,
    config = function()
      require("gruvbox").setup()
    end,
  },
}

tokyonight ColorScheme이 기본으로 적용된 화면은 아래 화면과 같습니다.

neovim_with_lazy_colorscheme

현재까지 설치된 플러그인 폴더 구조는 다음과 같습니다.

$> tree nvim-with-lazy
nvim-with-lazy
├── init.lua
└── lua
    ├── config
    │   ├── autocmds.lua
    │   ├── keymaps.lua
    │   ├── lazy.lua
    │   └── options.lua
    └── plugins
        ├── colorscheme
        │   └── init.lua
        └── init.lua

여기에 평소 사용하고 있던 플러그인이나 새로운 플러그인 추가하여 사용하시면 나만의 Neovim 설정이 완료됩니다.

참고링크