Neovim에 보내는 러브레터

4 hours ago 2
  • Neovim은 코드 편집을 빠른 타이핑이 아니라 이동, 변경, 삭제, 재구성, 테스트 확인이 이어지는 반복 루프로 다루게 함
  • Vim의 편집 문법은 ci", dap, ., 매크로, 텍스트 객체처럼 의미 단위 작업을 조합해 반복 편집의 마찰을 줄여줌
  • Neovim은 탐색기·터미널·Git 패널을 강제하지 않고, 버퍼를 중심으로 Telescope, Fugitive, LSP 등을 사용자가 고르게 만듦
  • 설정은 Git에 담긴 파일로 소유할 수 있고, 셸·tmux·ripgrep·git·language server와 함께 동작하는 시스템 일부로 남음
  • Lua, 내장 LSP, Treesitter, Lazy.nvim으로 현대화됐지만, 핵심 가치는 배운 동작이 오래 쌓여 워크플로가 직접 진화한다는 데 있음

Vim에서 Neovim으로 이어진 작업 감각

  • Vim 사용은 2011년에 시작됐고, 초반에는 .vimrc를 복사하거나 j가 문자를 입력하지 않고 커서를 움직이는 이유도 이해하지 못했음
  • 첫 주는 힘들고 첫 달은 낯설었지만, Vim의 모델이 익숙해진 뒤 다른 편집기는 코드와 사용자 사이에 완충층이 있는 것처럼 느껴짐
  • VS Code, JetBrains IDE, Sublime, Atom, Zed 등 여러 편집기를 써봤고, JetBrains 도구는 매우 강력하며 VS Code는 거의 모두에게 충분히 좋고 확장하기 쉬워 성공함
  • 그래도 Neovim을 계속 쓰는 이유는 작업 방식에 맞춰 움직이고, 코드 편집의 반복 루프를 직접적으로 지원하기 때문임

편집을 단축키가 아니라 언어로 다루는 방식

  • 코드 편집은 빠르게 타이핑하는 일이 아니라 이동, 작은 변경, 잘못된 추상화 삭제, 함수 재구성, 파일 이동, 테스트와 진단 확인이 반복되는 작업에 가까움
  • 대부분의 편집기는 텍스트를 문서로, 키보드를 입력 장치로 다루지만, Vim은 편집을 문법(grammar) 처럼 다룸
  • ci"는 따옴표 안을 바꾸고, dap는 문단을 지우며, .은 마지막 변경을 반복함
  • 매크로는 작은 루틴을 한 번 가르쳐 파일 전체에 반복 적용하게 하고, 텍스트 객체는 문자 수 대신 의미 단위에 작업을 적용하게 해줌
  • Vim 문법이 손에 익으면 마우스로 코드를 끌거나 사이드바를 클릭하거나 매일 수십 번 하는 작업마다 명령 팔레트를 여는 일이 줄어듦
  • 자주 하는 작업은 작고 직접적인 움직임이 되고, 편집기의 소음도 줄어듦

워크플로를 강제하지 않는 Neovim

  • GUI 중심 편집기는 탐색기, 터미널, Git 패널, 디버거의 위치와 형태에 대한 고정된 관점을 갖기 쉽고, 시간이 지나면 편집기가 조종석처럼 변함
  • Neovim은 버퍼에서 시작하며, 주변에 무엇을 둘지는 사용자가 결정함
  • 파일 트리가 필요하면 추가할 수 있고, 퍼지 검색은 Telescope나 fzf-lua처럼 맞는 도구를 고를 수 있음
  • Git 통합은 Fugitive를 사용할 수 있고, LSP, 진단, 포매팅, 스니펫, Treesitter, 테스트 러너, 자동완성도 느린 Electron 대시보드처럼 변하지 않은 채 처리 가능함
  • 속도는 시작 시간만이 아니라 신뢰의 문제임
    • 키를 누르면 즉시 반응해야 함
    • 큰 파일을 열 때 전체 UI가 멈칫하지 않아야 함
    • SSH 접속, tmux 페어링, 작은 터미널 창에서의 수정에서도 매일 쓰는 편집기 감각이 유지되어야 함
  • 로컬 프로젝트, 원격 서버, 빠른 설정 변경, 큰 Rails 앱, 작은 셸 스크립트, Markdown 글 작성까지 같은 이동, 같은 명령, 같은 근육 기억을 사용할 수 있음
  • 이런 일관성은 경력 전체에 걸쳐 누적됨

소유 가능한 설정과 시스템의 일부로 남는 도구

  • Neovim 설정은 Git에 들어 있는 파일이라서 직접 읽고, 망가뜨리고, 필요 없는 플러그인을 깨달았을 때 절반을 지울 수 있음
  • 미스터리한 설정 데이터베이스, 반쯤만 이해하는 동기화 계정 상태, 몇 릴리스 전 체크박스 변경 때문에 백그라운드에서 이상하게 동작하는 확장에 의존하지 않음
  • 현대 편집기 상당수는 모든 일이 벌어지는 장소가 되려 하지만, Neovim은 더 큰 시스템의 날카로운 일부로 남는 데 만족함
  • 셸을 대체하려 하지 않고 tmux, ripgrep, git, language server, formatter, linter, test runner와 함께 동작함
  • 전체 책상을 소유할 필요가 없다는 점도 Neovim이 오래 지속된 이유 중 하나임
  • 2011년 이후 여러 편집기, 확장 생태계, 테마, 마켓플레이스, AI 패널이 등장했지만, Vim은 이미 오래된 도구였고 Neovim은 사람들이 중요하게 여긴 이유를 버리지 않은 채 필요한 부분을 현대화함

현대화와 오래 지속되는 학습 보상

  • Lua는 설정을 더 좋게 만들었고, 플러그인 생태계도 크게 개선됨
  • 내장 LSP는 IDE 기능을 편집기에 가져오면서도 부풀어 오른 느낌을 주지 않음
  • Treesitter는 구문 강조와 코드 인식을 현대적으로 만들었고, Lazy.nvim은 플러그인 관리를 빠르고 단순하게 만듦
  • Neovim의 핵심 매력은 시간이 지나도 배운 것이 계속 쓸모 있다는 데 있음
    • 하나의 motion을 배우면 계속 도움 됨
    • 매크로를 작성하면 지루한 편집이 사라짐
    • 텍스트 객체를 발견하면 귀찮은 리팩터링이 쉬워짐
    • 명령 하나를 조정하면 손의 일부가 됨
  • 편집기는 회사가 새 사이드바를 출시해서 좋아지는 것이 아니라, 사용자가 더 잘 다루게 되면서 좋아짐
  • 생산성은 “여기서 5초를 아꼈다”만으로 측정하기 어렵고, 수천 번의 작은 편집에서 마찰이 줄어드는 데 있음
  • 코드, 테스트, git diff, 검색 결과를 오가면서 다른 방으로 이동한 느낌 없이 문제에 집중할 수 있음
  • Neovim은 프로그래밍 가능성이 높아 기본값을 받아들이기보다 워크플로를 직접 형성하게 만듦
  • 불편한 일이 두 번 반복되면 매핑, 명령, 작은 Lua 함수, 더 나은 플러그인, 또는 플러그인 삭제로 대개 고칠 수 있음
  • 설정은 실제 작업 방식에 맞춰 진화하고, 원하는 변경이 분명할 때 생각과 편집 사이에 놓이는 것이 매우 적음
  • 15년 동안 언어, 프레임워크, 머신 성능, 업계 유행은 바뀌었지만, Vim과 Neovim은 계속 가장 좋은 작업이 이뤄지는 중심 편집기로 남음
Read Entire Article