NVIM?

nvim

생소할 수 있다. 정식 명칭인 Neo Vim 은 Vim 에서 한층 더 업그레이드 된 Vim 이라고 보면 된다. 개발자라면 터미널에서 텍스트 파일을 열어볼 때 사용하는 명령어인 nano, cat 과 더불어서 vim 이라는 명령어로 친숙할 수 있다.

Vim VS NeoVim(NVIM)

위에서 말했듯이 업그레이드 버전이라고는 하였지만 정식 업그레이드 버전은 아니다.(포크 관계라고 부르는게 정확할것이다.) 그렇다면 어떤점이 업그레이드 된것이냐? 라고 하면

  1. 비동기 처리 지원: 외부 명령어나 플러그인을 실행하면, 그 작업이 끝날 때 까지 멈추는 Vim 에 비해 비동기 처리를 지원하는 Neo Vim 은 무거운 작업들을 백그라운드에서 처리해서 렉이나 멈춤없이 계속해서 편집 작업을 할 수 있다.

  2. 확장성 및 스크립팅: VimScript 라는 생소하고 배우기도 어려운 자체 언어로 플러그인을 만들다 보니 확장 기능이 낮은 Vim 과는 다르게 NeoVim 은 Lua 언어를 도입하여 수많은 플러그인들이 커뮤니티에 확장되어 많은 생태계가 활발하다.

  3. LSP 내장 지원: LSP 는 쉽게 말해서 코드 자동 완성, 오류 확인해주는 기능이다. 이는 요즘 IDE에서 제공하는 기술이다. Vim 은 기본적으로 없고 플러그인을 통해서 만들지만 NeoVim 은 애초에 LSP 클라이언트를 자체에 내장하고 있어서 현대적인 IDE 로 거듭날 수 있게 되었다.

표로 본다면 이렇다.

구분VimNeoVim
목표안정성, 전통성, 이식성현대성, 확장성, 속도
주요 언어VimscriptLua, VimScript
비동기 지원지원 안함 (에디터 멈춤)완벽 지원 (멈춤 없음)
LSP 지원플러그인으로 가능내장 지원
개발 방식창시자 중심커뮤니티 중심 (오픈소스)




VS Code 있는데 걍 이거 쓰는게 좋지 않음?

vim vs vscode

맞는 말이다. 나 또한 vs code 를 사용하고 있다. 심지어 몇몇 기능으로서는 VS Code 가 더 좋은점도 있다.

“그런데 니가 뭔데 nvim 을 설명하고 있냐?”

라고 할 수 있다. 현재 업무적인 작업은 vs code 를 사용하고 있고 개인적인 프로젝트는 NeoVim 을 중심으로 작업하고 있으며, 천천히 nvim 으로 갈아타는 중이다.

그러면 VS Code 에 비해 NeoVim 이 가진 이점을 말하자면:

  • 압도적인 속도와 가벼움: 그냥 거의 즉시 실행되고, 메모리 사용량도 적어서 빠릿빠릿 하다.
  • 터미널 중심의 프로그램: 그냥 cd 로 여기저기 돌아다니다가 원하는 경로에서 nvim 명령어 하나로 바로 터미널에서 열린다. code . 명령어를 사용할 수 있지만 프로그램 열고 터미널 닫고 이런 번거러움이 없다. 또한 :q 를 통해 바로 터미널로 돌아갈 수 있다.
  • 커스터마이징: VS Code 는 기업에서 제공해 주는 “제품” 이다 보니 가지고 있는 틀에서 사용하게 된다. 물론 많은 확장 프로그램을 통해서 내 입맛에 맞출 수 있지만, 근본적인 틀 안에서 움직인다. 하지만 NeoVim 은 그냥 내 마음대로, 100% 내 작업 방식에 맞춰진 세상에서 단 하나뿐인 도구로 만들 수 있다.
  • 텍스트 편집 효율성: Vim 을 포크한 프로그램이다 보니 마우스가 필요없다. 단축키만 알고 있다면 모든 작업을 키보드에서 작업할 수 있기 때문에 마우스를 사용하기 위한 손 이동을 최소화로 할 수 있다. 다만 이건 어느정도 마스터했을 경우이다.

요약하자면 VS Code 는 ‘즉각적인 편리함’, NeoVim 은 ‘압도적인 효율성과 완벽한 통제권’ 이라는 것이다. 하지만 대부분의 개발자들이 VS Code를 사용하는 이유는 무엇일까?

위에 설명했듯 nvim 의 성능, 기능, 확장성, 커스터마이징 등등 좋은점이 많지만 vs code 에 비해 널리 알려지지 못한 계기 중 제일 큰 단점으로 진짜 존나 어렵다 는 것이다.

리눅스나 맥북, 윈도우에서 세팅이나 환경 같은 경우에는 어쩌다 모르는게 있으면 찾아보면 그만이지만 NeoVim 은 애초에 IDE 이기 때문에 작업 도중 기능 하나 찾아보겠다고 검색하고 다시 돌아와서 작업하는 과정이 매우 비효율적이며, NeoVim 을 사용하는 이유마저 없어진다. 그리고 NeoVim에서 세팅이나 플러그인을 사용하는것 자체가 전부 직접 코드를 작성하고 단축키도 곂치는것 없이 설정하여 NeoVim을 제어한다는 것 부터 시간소요가 매우 많이 들어간다.

결론은 초기의 높은 학습 비용(시간)을 투자하여, 평생 사용할 수 있는 강력한 ’생산성 자산’을 얻는 것 이다. 즉, 초기를 버티면 VS Code 를 사용하는 것보다의 이점이 생기긴 하나 진입장벽이 매우 높다는 뜻.

그러면 에디터를 직접 사용하기 전부터 그냥 머리박고, 추가하고, 만들고 해야되는것 뿐일까?




LazyVim

LazyVim

이러한 어려움은 전 세계 모든 개발자들도 느끼는 것 중 하나이기에 NeoVim을 처음부터 필요 기능만 갖추어진 스타터 팩이 있다. 대표적으로 AstroNvim, Kickstart nvim, LunarVim, LazyVim 등등 있으며, 나는 LazyVim 을 사용하고 있다. 각각 지향하는 컨셉이 있지만, LazyVim 은 입문자에게 추천하며 실제로 대부분의 neovim 사용자들은 lazyvim 을 사용하고 있기에 어려운 부분이 있으면 찾아보기 쉽다.

LazyVim Start

설치하고 실행하면 자동으로 LazyVim 이 의존성 패키지들을전부 설치해 주고, 바로 사용할 수 있다. 하지만 LazyVim 도 결국 NeoVim 이기 때문에 수많은 명령어를 알아야 한다.

그리고 :Lazy 혹은 <leader>l 로 다운로드, 업데이트 등 LazyUI로 확인할 수 있으며, 첫 화면에서 x 키로 부가적인 기능을추가할 수 있다. (추가로 현재 열려있는 파일에 따라서 부가기능을 추천해준다.)

또한 IDE 역할을 하게 만든 수많은 플러그인들에 대한 단축키도 아래의 링크에서 확인할 수 있으며, 잘 활용만 한다면 IDE 역할을 톡톡히 하게 할 수 있다.

LazyVim KeyMaps

참고로 leader 키는 명령 모드로 진입하는 키로 처음 세팅된 키는 space bar이다. 물론 전부 알 수는 없지만 제일 많이 사용하는 키를 간략하게 확인해보자면

  • <Space>e: 파일 탐색기 열기/닫기 (.파일 확인: H)

  • <Space>bd: 현재 버퍼 닫기

  • <Space>wd: 현재 창 닫기

  • <Space>-: 아래쪽에 새 창 분할

  • <Space>|: 오른쪽에 새 창 분할

  • [b: 이전 버퍼로 이동

  • ]b: 다음 버퍼로 이동

  • <Space>ff: 파일 이름으로 검색 (루트 디렉토리 기준)

  • <Space>fF: 파일 이름으로 검색 (현재 디렉토리 기준)

  • /: 현재 파일 내용에서 이름으로 검색 (이후 next: n, prev: N)

  • <Space>fT: 터미널 열기 (현재 디렉토리 기준)

  • <Space>ft: 터미널 열기 (루트 디렉토리 기준)

만약 너무 모르겠으면 그냥 스페이스바 클릭하면 KeyMap에 대해서 나오니 차근차근 확인하고 실행하면서 손에 익히면 된다.

참고로 위에 있는 단축키들은 기존 NeoVim 단축키들과 별개이니 NeoVim 단축키들도 알아야한다.




난 그냥 VS Code 쓸래…

vi

어떻게 보면 현명한 판단일 수 있다. 나라도 추천한다면 vim 같은거 말고 vs code를 추천할 정도이니 말이다.

나 또한 바로 VS Code 를 삭제하고 NeoVim 으로 넘어가지 않은 이유도 매우 가파른 학습곡선 및 수많은 단축키들 때문이다. 이를 근거로 하는 몇몇 포스트들 또한 존재한다.(여기) 그렇다고 해서 nvim 을 굳이 어렵다는 이유 하나로 vs code만 사용해야 할까?

NeoVim은 장단점이 극명하게 나타나며, 단점을 보안하게 되는 시점에서 장점만을 가지게 되는 IDE를 ‘어려우니까’ 라는 이유로 단절해버리기 보다는 시도 해볼만하다고 생각한다. 무료인데다 가벼우며, 터미널만 있으면 어디에서든 사용할 수 있는 장점이 있으니 나는 조금씩 조금씩 손에 익혀보려고 한다.