Neovim with Lua (1) 시작하기

나사공·2022년 5월 22일
3

Neovim with Lua

목록 보기
1/1
post-thumbnail

들어가기에 앞서...

lua 와 native lsp 기반의 neovim은 아직 한참 초기 단계이다.
빠르면 분 단위로 플러그인이 업데이트되며, neovim 자체도 breaking changes가 자주 일어나고 있는 만큼, 설정해둔 config 파일을 자주 수정해줘야 한다.

단순히 IDE 기능을 갖춘 vim을 쓰고 싶다면 vim-script & coc 를 사용하는 것을 강하게 권장한다.

neovim --version
# NVIM v0.7.0
# Build type: Release
# LuaJIT 2.1.0-beta3

개요

2021년 말에 neovim v0.5가 여러 신 기능들과 함께 등장한 이후로, neovim 커뮤니티는 매우 빠르게 변화하고 있다.

2020/08 - v0.4.4
2021/07 - v0.5.0
2021/09 - v0.5.1
2021/12 - v0.6.0
2022/01 - v0.6.1
2022/04 - v0.7.0
2022/10 - v0.8.0 (stable)
2022/11 - v0.9.0 (nightly)

정신나간 업데이트 주기
(2022.11.12. 추가: v0.8 이후로 조금 나아졌다. 주요 기능들은 v0.8에서 어느정도 stable 단계에 접어든 것으로 보인다.)

vim script와 coc가 주도하고 있었던 neovim 환경설정이 점차 lua와 native lsp를 기반의 방향으로 변하면서, emacs에서나 볼 법한 유용한 플러그인들도 많이 등장했다.
본 시리즈는 이러한 최신 트랜드에 맞춘 neovim 설정 방법을 소개하려 한다.

Lua script로 설정파일 작성하기

이 방법에 대해서는 잘 설명해둔 글이 있어서 첨부한다.
https://github.com/nanotee/nvim-lua-guide

사실 이걸 번역하는게 강좌로서는 도움이 될지도 모르지만... 난 단순 강좌가 아니라 스스로 작성한 설정파일에 대한 기록 목적도 겸하고 있으므로 내 config를 기준으로 설명할 계획이다.

~/.conifg/nvim/

nvim의 설정파일들은 다음 위치에 저장된다.
맥 / 리눅스의 경우 : ~/.config/nvim/
윈도우의 경우 : ~/AppData/Local/nvim

내가 현재(2022년 5월) 사용하고 있는 nvim 설정 폴더의 구조는 다음과 같다.

📂 ~/.config/nvim
├── 🌑 init.lua
└── 📂 lua
   ├── 📂 core
   │  ├── 🌑 options.lua
   │  ├── 🌑 keymaps.lua
   │  ├── 🌑 plugins.lua
   │  ├── 🌑 colorscheme.lua
   │  └── 📂 statusline
   │     └── 🌑 init.lua
   ├── 📂 lsp
   │  ├── 🌑 init.lua
   │  ├── 🌑 handlers.lua
   │  ├── 🌑 lsp-installer.lua
   │  └── 🌑 null-ls.lua
   └── 📂 plugins
      ├── 🌑 cmp.lua
      ├── 🌑 telescope.lua
      ├── 🌑 treesitter.lua
      ├── 🌑 comment.lua
      ├── 🌑 autopairs.lua
      ├── 🌑 gitsigns.lua
      ├── 🌑 nvim-tree.lua
      ├── 🌑 bufferline.lua
      ├── 🌑 lualine.lua
      └── 🌑 toggleterm.lua

neovim 설정에서 핵심적인 파트들, 혹은 내가 직접 개발한 비율이 높은 파일들은 ./lua/core 폴더에, LSP(Language Server Protocol)와 관련된 파일들은 ./lua/lsp 폴더에, 기타 다른 플러그인들의 setup script는 ./lua/plugins 폴더에 넣어줬다.
setup script가 별도로 필요한 플러그인들은 전부 플러그인 이름으로 된 파일로 정리했고, 위 모든 lua 모듈들을 ./init.lua 파일에서 require() 함수로 가져오는 형태이다.

./init.lua 파일은 아래와 같다.

require "core.options"
require "core.keymaps"
require "core.plugins"
require "core.colorscheme"

require "lsp"

require "plugins.cmp"
require "plugins.telescope"
require "plugins.treesitter"
require "plugins.comment"
require "plugins.autopairs"
require "plugins.gitsigns"
require "plugins.nvim-tree"
require "plugins.bufferline"
require "plugins.lualine"
require "plugins.toggleterm"

이제 알았는데, velog는 lua에 대한 syntax highlighting을 지원하지 않는다... 맙소사

다음 강좌부터 위 ./init.lua 파일이 가져오고 있는 설정 파일들에 차근차근 설명할 것이다.

profile
취미로 개발을 하고 있는 공대생입니다.

0개의 댓글