NeoVim을 IDE로 만들기

Kyu Yeon 'rebel' Lee·2022년 11월 20일
0

TL;DR
Neovim설정은 https://github.com/LunarVim/nvim-basic-ide 에서 시작
내가 사용하는건 (WIP)에서 확인 가능
Vim말고 Neovim 합시다

개요

  • NeoVIM을 사용하다보니 오히려 작은 프로젝트에는 VIM을 사용하는 일이 많이 생김
  • 다른 영상을 보면 엄청나게 잘쓰고 이리저리 가던데, 내가 사용하는 Vim은 1년동안 세팅했는데 아직도 추천기능이 없음.
  • 이 기회를 노려서 여러 사람들의 세팅 방법을 보고 들으면서 (+ 써본사람의 이야기를 들으면서) 세팅을 다시해보는 것을 목적으로 함.

과정

도전

  • 사실 어디서 시작해야할지 모르겠음
  • 주어진 정보는 있지만, 시작점이 잘 안보이는 상태

추적

  • SpaceVim이라는 것을 알게되었고, 확인해보니까 Vim Distribution이라는 이름으로 Vim세팅을 다 해주고 한번에 사용핳 수 있도록 해주는게 존재한다는 것을 확인
  • lua을 사용한 더 유연하고 쉬운 설정이 가능하는 것 확인
  • Vim Distrubution을 다 사용해 보면서 이 사람들이 대체적으로 어떻게 Neovim을 설정하는지에 대한 방향석 확인
  • LunarVim이 조금 더 내가 설정하기에 좋았으나, 이 Distribution을 거의 스켈레톤으로 남겨준 Git Repository확인. 이것을 베이스로 시작한다면 문제가 없을것이라 판단.
  • 기존에 사용하던 VimScript설정을 백업해두고 설정 시작

세팅

환경별 세팅 기반

  • MacOS : fish terminal
  • Linux : Arch/Debian fish terminal
  • Windows:
    • WSL: Same as Linux = Arch + fish
    • Native: Msys2 Terminal Emulator

Pre-requisite

  • Node.js 16+
  • Python 3.9+
  • fzf
  • ripgrep

세팅 기준

  • 베이스는 다음과 같은 리포지토리를 기반으로 설정 함
    https://github.com/LunarVim/nvim-basic-ide
  • 다음과 같은 언어를 설치
    언어 설치는 동봉된 Plugin인 Mason을 이용하여 하였다. :Mason 명령어를 실행만 하면 되니 Pre-requisite만 충족한다면 그렇게 오랜 시간은 걸리지 않는다.
    • Go (STRONG)
    • Rust (STRONG)
    • Lua (STRONG)
    • Python (VERY STRONG)
    • Node.js ( Javascript / Typescript ) (STRONG)
    • Java (WEAK)
  • Keybinding은 Neovide용과 터미널용 2가지로 구분했다.
    • 이상한 실수를 범하지 않도록, 2가지의 터미널은 키조합만 다르고 최종 콤비네이션 키는 같다.
    • TMUX에 사용되는 키는 절대로 중복되지 않도록 조합한다.
  • Linting및 빌드 결과 확인을 코드만 수정하면 바로바로 할 수 있도록 한다.
  • Vim Session이 느려지지 않도록 과도한 장난질은 하지 않는다.

세팅 소스

  • https://vimawesome.com/
    플러그인은 묻지도 따지지도 않고 이곳에서 가져온다.
  • github에도 좋은 플러그인이 많음
  • Vim에 빠진 크리에이터들은 내가 조사하던것을 풀타임으로 조사하고 있으니, 그사람들이 조사한것을 기반으로 플러그인을 설치하는것도 나쁘지 않다.

필수

  • Mason LSP Server Installer
  • Telescope Finder
  • FZF
  • Ripgrep

클라이언트 선정

  • 기존에 사용하던 iTerm2 Allacritty WezTerm 모두 뭔가 터미널로 쓰기에는 적당한에 터미널은 조오오금 더 사이즈가 큰 느낌이라 Vim만 돌릴 클라이언트가 필요하다는 것 확인
  • 여러 Vim Client를 선정하고 써보게 됨
    • VimR은 겉만 번지르르하고 기본적인 기능이 많이 부족한 것 확인
    • NeoVide는 조금 러프하지만, 내가 필요한 모든 기능이 있는 것 확인
      • Multiple Font Fallback
      • Hardware Accelerated Rendering
      • Fun Gimmicks
  • NeoVide를 MacOS에서 어플리케이션처럼 사용할 수 있도록 조치
    • ln $(which neovide) /Applications/Neovide.app
    • 기본적으로는 neovide는 nofork상태로 돌아가므로, open 명령어같이 neovide .같은 명령어를 사용해서 열 수 있다.

세팅 간 확인한 이슈

  • Node.js랑 Python은 필수인 듯 하다. 안깔려있으면 깔도록 하자.
    • Node.js 16+
    • Python 3.9 / 3.10을 추천한다.
  • Neovide는 셸 세션으로 열리는 것이 아니기 때문에, 수동으로 Environment Variable을 지정해주어야 한다.

내가 몰랐던 신기한 기능

  • Neovim도 터미널 시절부터 올라왔던 (나보다 나이가 두배나많은) 고전이지만, 그만큼 많음 업데이트가 발생한 건 사실.
  • 그중 0.8.x이후에 뭔가 신박한게 많이 생긴것으로 보임.
    • 가장 신박한게 ssh를 사용하지 않고, RPC를 사용하여 Remote Neovim Session Attach가 가능하다는 것 확인
    • 물론 보안문제로 인해서 기본적으로 켜져있지 않지만, Neovim Server Mode로 간다면 에디트가 가능하다.
    • 터미널 Vim Plugin이 깔려있다면 간이 ssh로 사용이 가능한 것으로 보임
  • 일부 LSP 플러그인들이 지원이 중단된거 확인
    • 약 1-2년전의 튜토리얼을 따라했다가 지금은 잘 안되는게 많음

비고

  • 내가 알던게 1년이 넘으면, 레거시다.
  • Vim이 할수있는건 많지만, 분석이나 고급 기능은 돈주고 사라. Jetbrain이 인기있는 이유는 다 있는 법.
    • Vim으로 1시간 걸리는게 Jetbrain으로는 2분이 걸리는 것이 있다.
    • Vim Evangelist가 되는 것도 좋지만, 이 자존심에 빠져서 모든 최신 기술을 거부하는 것은 바보같은 힙스터나 하는 짓.
  • 하지만, Vim을 배우고 나서 2년 반이 지났지만, 작업 속도가 엄청나게 빨라진것은 사실
    • 특히 모든 터미널 및 서버의 구성을 배우게 되면서 서버 관리도 엄청나게 빨라졌다.
    • stdin / pipe 등을 알게 되면서 프로그램도 더 단순해진 느낌

0개의 댓글