티스토리 뷰

etc/Vim

LunarVim 설치 가이드

기억용블로그 2023. 6. 23. 02:17
728x90

LunarVim 설치 가이드

LunarVim이란?

2015년 neovim이 출시되고 나서 5년이 넘는 기간 동안 neovim이 제공하는 훌륭한 native API를 이용해서 수많은 플러그인들이 릴리즈 되어 왔습니다.

LunarVim은 이 플러그인들을 모아서 IDE처럼 사용해보고자 2021년에 릴리즈된 opinionated neovim입니다.

왜 LunarVim을 써야 하나요?

해보신 분들은 아시겠지만 neovim을 손수 IDE만큼 기능을 갖출 수 있게 플러그인을 설치하는 것은 생각보다 쉽지 않습니다. 플러그인을 선별하는 것부터 에러없이 설치하고 config까지 세팅하는 것은 꽤나 시간과 정신력을 갉아먹는 일이죠.

그러므로 LunarVim은 다음과 같은 분들에게 추천드립니다:

  • 프로그래밍에 이제 막 입문했는데 터미널로 코딩하는게 멋있어보인다. (중요)
  • Vim이나 neovim을 쓰고는 있는데 설정하는게 너무 어려워서 좀 날로 먹고 싶다.
  • 지금은 안 쓰지만 왠지 언젠가는 Vim을 사용할 것같긴 하다.
  • vscodeJetBrains 제품을 쓰고는 있는데 뭔가 바꿔보고 싶다.

하지만 다음 분들에게는 굳이 필요없을 것 같네요:

  • 이미 Vim, neovim, vscode, JetBrains 등 아주 만족하며 잘 사용하고 있다.
  • plugin, config 등을 추가하며 쓰기 보다 있는거에 본인을 맞추는 편이다.
  • 새로운 의존성이 생기는 것이 별로 달갑지 않다.

설치해보고자 하는 마음이 드셨다면 아래 내용을 진행하시면 됩니다! 해당 가이드는 처음 입문하시는 분들에게 맞춰 설명하였습니다.

LunarVim 설치 과정

LunarVim은 편의성에 초점을 맞춘 프로젝트답게 설치 과정도 심플하게 잘 정리되어 있습니다.

2023년 06월 LunarVim 1.3, neovim 0.9 기준으로 설명을 드리지만 빠르게 성장 중인 프로젝트이므로 언제든 breaking change가 있을 수 있다는 점 염두해주세요.

필요 의존성 설치

LunarVim은 neovim과 여러 언어의 패키지 매니저에 의존하고 있으므로 다음 목록 설치가 필요합니다.

사용하는 운영체제마다 패키지 설치 방법이 다르므로 각자 상황에 맞게 다운로드해주시면 되며 제가 사용 중인 Arch Linux 기준으로 설명을 드리면:

$ sudo pacman -S neovim make git python python-pip npm node rustup cargorustup에 포함되어 있습니다.

LunarVim은 Luajit이 포함된 neovim을 필요로 하므로 $ nvim -v에서 LuaJIT 2.1.0-beta3 이 출력되는지 확인이 필요합니다.

[Optional] EACCESS 권한 에러 해결

npm 설치 중에 글로벌 권한 에러가 발생하신다면 다음 과정 을 따라주세요:

  1. 컴퓨터 백업하기
  2. $ mkdir ~/.npm-global
  3. $ npm config set prefix '~/.npm-global'
  4. 텍스트 에디터로 ~/.profile을 열거나 생성하신 후 export PATH=~/.npm-global/bin:$PATH 추가
  5. $ source ~/.profile

해당 문제는 발생하지 않을 수도 있으며 필수 과정이 아닙니다. 문제가 발생하실 경우에만 위 과정을 통해 해결하시면 됩니다.

LunarVim 설치

$ LV_BRANCH='release-1.3/neovim-0.9' bash <(curl -s https://raw.githubusercontent.com/LunarVim/LunarVim/release-1.3/neovim-0.9/utils/installer/install.sh)

실행하시면 프롬프트가 뜨면서 이것저것 설치할거냐고 묻는데 설치되는 목록 은 다음과 같습니다:

  • node: neovim, tree-sitter-cli
  • python: pynvim
  • rust: fd-find, ripgrep

공식 문서 에서는 ripgreppynvim에 의존하고 있다고 적혀있고 다른 의존성들 또한 다른 플러그인을 설치시 필요할 수 있으므로 가급적 전부 설치하시는 것을 권장합니다.

Nerd Font 설치

LunarVim은 Nerd font의 아이콘에 의존하고 있으므로 너드 폰트를 시스템에 설치하고 터미널에 해당 폰트를 사용하도록 적용하는 과정이 필요합니다.

만약 아이콘을 사용하고 싶지 않으시다면 ~/.config/lvim/config.lua'

lvim.use_icons = false

를 추가하시면 됩니다.

직접 설치

너드폰트 사이트에 들어가셔서 적당한 폰트를 다운로드 받으시거나, 제가 사용하고 있는 JetBrainsMonoNerdFont-Regular를 이용해서 진행하셔도 됩니다.

mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts && curl -fLO https://raw.githubusercontent.com/choikangjae/.dotfiles/main/font/JetBrainsMonoNerdFont-Regular.ttf

직접 다운로드 받아서 사용하시는 경우에도 ~/.local/share/fonts에 폰트를 두는 방식은 똑같이 적용하시면 됩니다.

인스톨러 이용

getnf 스크립트를 이용해서 쉽게 다운로드 할 수 있다고 합니다.

터미널 설정

$ fc-cache -f -v를 통해 터미널 폰트 캐시를 리프레시해준 이후 사용하고 계신 터미널이 제공하는 방법에 따라 해당 폰트를 사용하도록 설정하시면 됩니다.

Konsole 터미널을 사용하고 계시다면 Edit Current Profile -> Appearance에서 폰트 적용이 가능합니다.

기본적인 설정하기

여기까지 잘 되셨다면 LunarVim을 사용할 수 있는 최소 조건이 전부 끝났습니다!

이제 기본적인 설정 몇 가지만 해주면 되는데 먼저 다음 커맨드를 실행합니다:

cp ~/.local/share/lunarvim/lvim/utils/installer/config.example.lua ~/.config/lvim/config.lua

LunarVim에선 Vim의 ~/.vimrc나 neovim의 ~/.config/nvim/init.lua같은 설정 파일이 ~/.config/lvim/config.lua에 위치하고 있습니다.

위 커맨드를 통해 기본적인 설정 템플릿이 추가되었는데 이를 입맛에 맞게 바꿔서 사용하시면 됩니다. 제가 사용 중인 config.lua여기 에서 확인하실 수 있습니다.

LunarVim에선 Core pluginUser plugin으로 플러그인을 구분합니다:

  • 코어 플러그인: LunarVim 설치와 함께 설치되며 이미 실행되고 있거나 바로 사용할 수 있는 플러그인
  • 유저 플러그인: 유저가 직접 설치할 수 있는 모든 플러그인을 총칭

코어 플러그인

모든 코어 플러그인은 lvim이라는 특별한 테이블에 의해 관리되고 그중에서 lvim.builtin이나 lvim.lsp 등으로 설정에 접근하고 이를 수정할 수 있습니다.

LunarVim의 단점아닌 단점이 모든 설정이 한번에 되므로 어떤 플러그인이 어떤 기능을 하는지 정확히 알 수 없다는 점입니다. LunarVim의 코어 플러그인은 여기 에서 확인할 수 있으며 설정을 위해 알아야 할 중요한 플러그인에 대한 설명은 다음과 같습니다:

  • lazy.nvim:

    플러그인 매니저입니다. 플러그인의 설치, 삭제, 업데이트 등과 플러그인이 언제 어떻게 실행해야 되는지를 담당하고 있으므로 가장 중요한 핵심 플러그인이라고 볼 수 있습니다.

    참고로 lazy 플러그인은 릴리즈된지 1년도 되지 않은 신생 프로젝트임에도 그 기능과 성능으로 인해 1.3 버전부터 기존의 Packer에서 lazy가 기본 패키지 매니저로 변경되었습니다.

    :Lazy를 통해 해당 플러그인의 대시보드를 실행할 수 있습니다.

    config.lualvim.plugins = {...}에 유저 플러그인을 추가하면 lvim의 lazy.nvim에 의해 관리됩니다. 가장 중요한 플러그인이지만 거의 모든것을 다 자동으로 관리하므로 실제로 직접 이용할 일은 많지 않습니다.

  • mason.nvim:

    lsp, dap, linter, formatter 등을 관리해주는 플러그인입니다.

    • lsp: IDE스럽게 만들어주는 일등 공신으로 코드 자동 완성, 문법 강조, 에러 표시 등 IDE를 생각하면 떠오르는 대부분을 처리합니다. 가장 중요한 기능답게 따로 설정을 건드리지 않았다면 LunarVim에서 설치와 실행을 자동으로 처리합니다.
    • dap: 디버깅에 필요한 프로토콜이며, 필요한 경우 mason을 통해 설치 이후 config.lua에서 따로 설정을 해주시면 됩니다.
    • linter, formatter: dap와 비슷하게 mason을 통해 설치하고 config.lua에서 설정을 해주시면 됩니다.
  • nvim-treesitter:

    구문 분석 이후 언어에 따라 문법을 분석하여 강조해주는 플러그인입니다. 이또한 lsp와 함께 매우 중요한 플러그인으로 따로 설정하지 않는다면 자동으로 설치되고 실행됩니다.

  • which-key.nvim:

    <leader>키를 입력하면 나오는 대시보드의 정체가 which-key입니다. lvim.builtin.which_key.mappings = {...}를 통해 설정할 수 있습니다.

  • bufferline.nvim:

    Vim에선 현재 수정 중인 파일을 buffer라고 하며 bufferline은 이 버퍼들을 여러개 띄워서 탭처럼 사용할 수 있는 기능을 제공합니다.

  • lualine.nvim: 버퍼의 아래쪽에 표시되는 여러 가지 정보 표시
  • nvim-tree.lua: 파일 탐색기

이외에도 많은 코어 플러그인들이 존재합니다. 코어 플러그인에 대한 간단한 설정은 제 config.lua에서 검색을 통해 확인하실 수 있습니다.

유저 플러그인

유저 플러그인은 다음과 같은 형식으로 다운로드하여 사용할 수 있습니다:

-- ~/.config/lvim/config.lua

lvim.plugins = {
    {
        "folke/todo-comments.nvim",
        event = "BufRead",
        config = function()
            require("todo-comments").setup()
        end,
    },
    {
        "tpope/vim-surround",
    },
    {
        "folke/trouble.nvim"
    },
}

참고로 lazy.nvim에 의해 설치된 플러그인들은 ~/.local/share/lunarvim/site/pack/lazy/opt 에서 확인하실 수 있습니다.

해당 설정을 통해 모든 플러그인을 설치할 수 있으며 설치한 이후 설정은 다음과 같이 진행합니다:

lvim.plugins = {
    {
        "Mofiqul/vscode.nvim",
    },
}

local black = '#080808'
require('vscode').setup({
    disable_nvimtree_bg = true,
    color_overrides = {
        vscBack = black,
    },
    group_overrides = {
        BufferLineIndicatorSelected = { fg = black, bg = black },
        BufferLineFill = { fg = black, bg = black },
    }

})

위 코드에서 보시는 것처럼 require(MODULE NAME).setup({...})처럼 작성하시면 되며 vscode.nvim이 아닌 vscode로 작성하는 점에 주의하세요.

개인적으로 추천드리는 유저 플러그인은 다음과 같습니다:

  • ThePrimeagen/refactoring.nvim: 코드를 편하게 리팩토링할 수 있게 도와주는 플러그인
  • folke/todo-comments.nvim: 프로젝트 내의 TODO, BUG, FIX 등의 플래그를 모아서 볼 수 있는 플러그인
  • tpope/vim-surround: 스트링을 "", '', ``, {} 등으로 감싸거나 변환하거나 제거할 수 있는 플러그인
  • folke/trouble.nvim: 프로젝트 내의 경고, 에러 등을 모아서 보여주는 플러그인
  • phaazon/hop.nvim: 현재 화면 내의 단어에 키워드가 뜨며 그 키워드를 통해 즉시 이동할 수 있는 플러그인
  • Mofiqul/vscode.nvim: vscode 테마
  • iamcco/markdown-preview.nvim: 마크다운 파일을 실시간으로 브라우저에서 보면서 편집할 수 있는 플러그인

이것으로 가장 기초적인 설명은 모두 끝났습니다. 계속 사용하시면서 본인만의 IDE를 만들어 나가시기를!

참고

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함