Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Neovim으로 생산성 퀀텀점프하기 by 이재열

Neovim으로 생산성 퀀텀점프하기 by 이재열

저는 개발자로서 RoamResearch와 VSCode를 사용하던 중 불의의 사고를 겪었습니다. 사고를 겪은 직후, Neovim을 접하고 나서 저의 개발 도구와 글 작성 도구를 모두 이것으로 전환하게 되었습니다. 그만큼 매력적인 도구인 Neovim을 여러분께 소개하고, 100퍼센트 활용할 수 있는 팁까지 공유하고 싶습니다.

발표자 소개
Neovim 에 과몰입한 백엔드 개발자
INTP과 ENFP 사이를 오가는 하이브리드
사색을 좋아하면서 한편으로는 도파민 자극을 좋아합니다

Excelcon

June 03, 2023
Tweet

More Decks by Excelcon

Other Decks in Programming

Transcript

  1. 발표 내용 소개 이재열 (@kodingwarrior) - INTP / ENFP 사이를

    오가는 하이브리드 - Neovim에 굉장히 과몰입한 누리꾼 이번 발표에서는 Neovim에 과몰입하게 된 사연과 함께 Neovim으로 어떻게 생산성이 개선되었는지 소개합니다.
  2. Neovim 의 장점이 지나치게 부각되는 세션이 될 수도 있습니다. Neovim

    이 얼마나 매력적인지 소개하는 세션이 될 수도 있습니다만 다른 도구로도 생산성을 충분히 높일 수 있음을 밝힙니다.
  3. 01 Vim 은 터미널 환경에서 동작하는 multi-modal 텍스트 에디터입니다. Multi-modal

    : 여러 개의 모드를 가진다는 의미 Vim 에서 지원하는 모드 • Normal : 명령어를 실행할 수 있는 모드 • Visual : 텍스트 처리가 필요한 영역을 선택할 수 있는 모드 • Insert : 텍스트를 편집할 수 있는 모드 Neovim 과의 만남 Vim Editor
  4. 01 Neovim 과의 만남 Vim Editor Input mode Visual mode

    Normal mode i 입력 ESC 입력 ESC 입력 v 입력
  5. 01 장점 • 텍스트를 효율적으로 편집할 수 있게 하는 여러가지

    기능이 내장되어 있음 • 어떤 환경에서든 사용할 수 있을 정도로 가볍고 빠름 (ex. 메모리가 500mb인 서버) 단점 (초보자의 입장에서) • 단축키를 손에 익히는 과정에 시간을 어느정도 들여야 함 • 모드를 스위칭하는 매커니즘이 직관적이지 않아 처음 쓸때는 상당히 인지부하가 올 수 있음 • “Vim꾸” 를 하는 과정에서 진입장벽이 느껴질 수 있음 Neovim 과의 만남 Vim Editor
  6. 01 Vim VS Neovim • Vim에서는 vimscript로 커스터마이징하지만, Neovim에서는 lua

    기반으로 커스터마이징이 가능함 • 플러그인 생태계가 훨씬 더 발전되어있으며, 좀 더 개발자 경험(DX)을 개선하는 플러그인들이 개발되고 있음 • Treesitter builtin support • LSP builtin support Neovim 과의 만남 Neovim
  7. 01 개인 노트북이 발열 심한 편이었는데, 결국은 배터리 스웰링이 터짐.

    배터리가 터진 관계로 노트북은 잠시 수리맡기고 전 회사에서 맥미니 빌려서 작업을 해서야 겨우 일을 이어갈 수 있었던 웃픈 사정이 있었음. (3개월 동안….) Neovim 과의 만남 사건의 시작 - 배터리스웰링
  8. 01 수리를 받고 나면서부터는 일부 키가 인식이 되지 않음. 기존의

    손가락 배치 - 엄지손가락을 제외한 모든 손가락은 키보드 위에 위치해있고, 엄지 손가락으로 트랙패드를 조종하던 구조였음. 이후의 손가락 배치 - 외장 키보드를 연결해서 사용해야함. 트랙패드를 사용하기 위해 손 가락을 키보드에서 좀 멀리 움직여야 함. 발상의 전환 - 키보드로만 navigation해도 개발에 지장이 없도록 스스로를 개조하자 Neovim 과의 만남 익숙한 손가락 배치에서 벗어난 불안감
  9. 01 Neovim 과의 만남 (참고) 손가락 배치 Before/After Before •

    손의 위치를 최소한으로 움직이면서 엄지손가락으로 트랙패드를 조작할 수 있었음 After • 트랙패드를 조작하기 위해서 손의 위치를 많이 움직여야 함
  10. 01 트랙패드, 빨콩, 마우스 등 포인팅 디바이스에 의존하지 않고도 내

    손에 익숙한 키보드만 잘 잡고 있어도 개발하는데 지장이 없어야겠다는 자각이 들기 시작함 환경을 새로 옮겨다닐때마다 settings.json 세팅하기도 귀찮고, VSCode 확장 설치하다보면 그냥 손에 잡히는대로 좋아보이는거 설치하곤 하는데 뭐뭐 안깔았었는지 체크하기도 귀찮음. 그냥 어떤 환경을 옮겨다녀도 개발환경이 동일하게 유지되는 환경이 필요했음 Neovim 과의 만남 Action 1 - VSCode -> Neovim
  11. 01 GUI 어플리케이션들이 가지는 고질병이 있으니… 그것은 너무 느리다는 것이고

    (렌더링 시간, 부팅 시간, …), 필요에 따라서는 마우스를 움직여야 하는 수고를 들여야 하는 것. 개발 환경과 학습 기록/일지 작성이 분리되어 있으니 매번 스위칭을 할때마다 알트탭을 누르는게 번거 로움. 알트탭으로 스위칭 후 내비게이션이 스무스하게 잘되냐면 그것도 아님. (1) 컨텐츠 저작 도구(VSCode)/(2) 학습기록/(3) 일지작성 역시 일원화를 해야겠다는 필요성을 느낌 Neovim 과의 만남 Action 2 - RoamResearch/Notion -> Neovim
  12. 01 Notion, VSCode 를 동시에 쓰고 있는 상황이라고 가정해봅시다. Notion도

    역시 개인적인 목적으로 쓰고 있다고 가정하겠습니다. • VSCode -> Notion -> VSCode -> Notion -> … ◦ 각각의 어플리케이션으로 전환할때마다 어플리케이션이 여러개 켜져 있을 수록 화면 전환 탭을 눌러야 하는 횟수가 많음 ◦ 각각의 어플리케이션으로 전환할때마다 사용법을 떠올리느라 잠깐의 멈춤이 있음 하나의 도구만을 쓰고 있는 상황이라면 흐름을 온전히 유지할 수 있게 됩니다. Neovim 과의 만남 Effect 1 - 컨텍스트 스위칭 비용 최소화
  13. 01 컴퓨터 과학 분야에서의 설명 • 여러개의 프로세스가 실행되고 있을

    때 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것 생산성 개선이라는 관점에서의 설명 • 한 가지 일에 대한 업무를 중단해 다른 일에 착수하는 행위, 인터럽트에 의한 행위 관심있는 분들은 “업무 시각화" 라는 책도 보시면 좋아요 Neovim 과의 만남 (참고) 컨텍스트 스위칭
  14. 01 Vim의 설정은 .vimrc Neovim의 설정은 .config/nvim 경로에서 관리됨 이러한

    설정들을 Github Repository에 올려놓으면 어느 개발환경에서든 리포지 토리에 올라온 구성대로 바로 활용할 수 있음. 에디터 플러그인이라던가 키맵도 동기화하기 쉽다. (개인용/업무용) Neovim 과의 만남 Effect 2 - 어떤 환경이라도 일관성 있는 근무환경 유지
  15. 01 • VSCode, RoamResearch(Notion), Chrome, GitKraken, Android Studio 등 동시에

    띄워서 작업해왔음. • VSCode 인스턴스도 여러개 띄워놓을 일이 많았어서 비행기 이륙소리는 물론이고, 노 트북이 64GB RAM 이었지만 메모리 점유율이 아슬아슬했음 쓰레싱이 빈번히 일어나서 키보드를 타이핑하고 그 결과가 반영되기까지의 시간이 느려지는 일이 종종 있었음 Neovim 과의 만남 Effect 3 - 좀 더 줄어든 발열, 버벅거림의 최소화 (Before)
  16. 01 • 오로지 Neovim(+tmux), Chrome 만 띄우고 있음. • 메모리

    점유율도 Chrome 말고는 차지하는게 별로 없음. ◦ Neovim 이 메모리점유율을 차지한다면 높은 확률로 일부 플러그인이 비효율적으로 짜여져 있음. ◦ Before - 32GB~55GB / After - 6GB~13GB 비행기 이륙 소리도 거의 안 들림 Neovim 과의 만남 Effect 3 - 좀 더 줄어든 발열, 버벅거림의 최소화 (After)
  17. 02 • 대용량의 파일을 편집하더라도 버벅거림이 없다. ◦ 개인적인 경험에

    기반하면 100만 Line까지 편집가능 • 파일을 빠르게 탐색할 수 있게 해준다 ◦ ex. N번째 라인으로 이동하기 ◦ ex2. 커서를 word 단위로 이동하기 ◦ 그 외에도 빠른 커서 이동을 지원해주는 플러그인들 ▪ lightspeed.nvim, vim-easymotion, … Neovim의 매력에 빠져든 이유 터미널 기반의 에디터이기 때문에 빠르다!
  18. 02 • 깃헙에 dotfiles 저장소를 만들어서 관리하면 어느 환경에서든 git

    pull 하는 것 만으로도 동일한 개발경험을 누릴 수 있음 ◦ .config/nvim, .zshrc, .bashrc, .config/tmuxinator • Chezmoi ◦ Manage your dotfiles across multiple diverse machines, securely. ◦ chezmoi update 명령 한 줄 실행하는 것 만으로도 어딘가에 백업해놓은 저장소 (remote repository) 에 올라간 설정파일을 그대로 가져와서 바로 적용할 수 있음 Neovim의 매력에 빠져든 이유 어느 환경에서 사용하든 동일한 개발경험
  19. 02 • Github CLI를 응용해서 만들어진 octo.nvim • CLI Tool의

    도움을 이용해서 에디터의 기능을 더 확장할 수 있는 것만으로도 생산성에 큰 기여를 할 수 있음. Neovim의 매력에 빠져든 이유 CLI 도구와의 궁합이 좋음 (UNIX 철학에 부합) Function f : CLI 도구 Input x : 편집하고자 하는 텍스트 Output f(x) 텍스트를 CLI Tool에서 처리한 뒤, 에디터에 들어가는 텍스트
  20. 02 한글로 잘못 타이핑된 건 영어로, 영어로 잘못 타이핑된 건

    한글로 바꾸기 Neovim의 매력에 빠져든 이유 EX. 파이썬 스크립트로 기능 확장하기
  21. 02 • Go To Definition • Go To Reference •

    Auto Completion • Semantic Syntax Highlighting Neovim의 매력에 빠져든 이유 다른 에디터 못지 않게, LSP/TreeSitter 지원이 좋은 편
  22. 02 키맵을 따닥따닥 입력하는 것만으로도 파일 검색/패턴 검색이 가능하게 해주는

    Neovim의 핵심적인 플러그인 그 자체! 여러가지 유용한 목적으로도 마음대로 요리해서 사용할 수도 있음! Neovim의 매력에 빠져든 이유 Telescope.nvim - Neovim 진영의 “범용성 검색엔진"
  23. 02 필요에 따라 확장도 가능하고, 쿼리할 수 있는 모든 것들을

    검색할 수 있음. (git commit, 사용할 수 있는 명령어, manpage, …) Neovim의 매력에 빠져든 이유 Telescope에서 지원하는 다양한 기능들
  24. 02 얼레벌레 작업하다가 한 파일에서 일어난 여러 변경사항들이 엄밀하게는 서로

    다른 의미를 가질때. 하나의 파일 안에서 발생하는 변경사항을 여러개의 커밋으로 분리해야하는 상황이 발생할때 Neovim의 매력에 빠져든 이유 vim-gitgutter - sign column / stage hunk
  25. 02 불필요하게 자원을 차지하고 있는 이미지/컨테이너를 삭제하고 싶을때 매우 편리

    함 Neovim의 매력에 빠져든 이유 docker-denops.vim - Docker 이미지/컨테이너 관리
  26. 02 커맨드라인으로 직접 실행한다면 복잡하게 파라미터를 넘겨줘야 했겠지만, 단순히 키맵을

    연결해준 것만으로도 의도한대로 편집기에서 변경이 이루어진다. 시스템 콜에 직접적으로 접근이 가능하기 때문에, 에디터/쉘 간의 상호작용으로 해낼 수 있는 가능성은 무궁무진하다. TUI Application을 구성하기 위한 플랫폼으로서도 주목받을만함. Neovim의 매력에 빠져든 이유 이렇게 살펴보니 Vim은 어떤 물건인가…?
  27. 02 • 앞서 언급했던 Neovim의 범용성 검색엔진 그 자체인 Telescope.nvim

    기반으로 구성된 노트 관리용 플러그인. • 마크다운 지원 (옵시디언 호환됨) ◦ Notion/RoamResearch를 과감히 버리게 해준 장본인 • 내부 링크는 키맵 입력하는 것만으로도 쉽게 이동이 가능함 • 내부 링크 삽입도 역시 검색해서 찾는 것이 됨 Neovim의 매력에 빠져든 이유 Telekasten.nvim - Note Taking
  28. 02 지식 관리와 블로그 컨텐츠 생산의 획일화 Neovim의 매력에 빠져든

    이유 Telekasten.nvim - with Static Site Generator (ex. Jekyll)
  29. 02 • Copilot.vim ◦ Notion AI…? 우리에게는 Github Copilot이 있다!!

    • ChatGPT.nvim, NeoAI.nvim • Translate.nvim - DeepL Pro API 지원 • Mastodon.nvim - 북마크에 담아둔 아티클을 TIL에 바로 집어넣기 ◦ 이론상으로는 bluesky.nvim도 가능할지도..? Neovim의 매력에 빠져든 이유 이런 것들도 스무스하게 잘 됩니다 (분량 상 생략)
  30. 03 저는 개인적으로 아래와 같이 정의내리고 싶습니다. • 한정된 시간

    동안 할 수 있는 작업의 양 • 생산성이 높다는 것은 주어진 시간에 많은 일들을 쳐낼 수 있게 된다는 것. 생산성을 높이려면? • 온전히 집중해서 작업의 속도를 높일 수 있어야 한다. • 작업을 하는데 드는 속도를 부분적으로 최적화한다. 다시, 생산성 생산성을 무엇이라고 정의해야 할까요?
  31. 03 우리가 무언가를 의식하고 행동하는 것은 정신적인 에너지를 소모하는 행위다.

    정신적인 에너지를 소모할때마다 정신이 산만해지고, 산만해짐으로 인해서 생산성도 떨어질 수 밖에 없다. 모든 것을 하나의 도구에서 해결하기에 하나의 도구에서 이탈하지 않는것. 그것은 온전히 하나의 행위에 집중할 수 있게 한다. 다시, 생산성 다시 한번, 컨텍스트 스위칭
  32. 03 어떤 도구, 어떤 툴을 쓰느냐의 문제가 전혀 아닙니다. 내가

    쓰고 있는 도구의 단축키/키맵을 체화해놓으면 미세하게나마 도움됩니다. 어떤 행위를 하기 위해 드는 시간이 1.6배 ~ 3배 이상 줄어들 수 있습니다. 대표적인 예시를 들어보겠습니다. (VSCode 기준) • Go To Definition ◦ 마우스를 심볼 위에다 올려서 Ctrl + 마우스 왼쪽 클릭 ▪ 좀 더 극단적으로는 마우스 우클릭 > Go To Definition 클릭 ◦ 텍스트를 편집하고 있는 커서를 심볼로 이동해서 F12 키 입력 다시, 생산성 GUI 기반의 인터랙션은 단축키/키맵의 속도를 이길 수 없음
  33. 03 Neovim 플러그인 생태계에서 제공하는 온갖 기능을 활용하여 내가 작업하는

    동안에 드는 소요시간을 미세하게나마 줄일 수 있음. 하지만, 협업하는 환경이라면 다 같이 Vim/Neovim 쓰자고 합의하는게 아닌 이상 협업하는 환경에 맞는 도구를 쓰면서 다 같이 생산성을 향상시키는 방향을 모색하는 것도 중요함 다시, 생산성 But, 생산성 향상을 위해 반드시 Neovim을 쓸 필요는 없음
  34. 03 생산성 개선은 내가 어떤 행위에서 불필요하게 시간을 소모하는지 분석하는

    메타인지에서 시작합니다. 1.일단 내가 사용하는 도구에 익숙해진다. 2.내가 어떤 작업을 반복적으로 하는지 살펴보고 반복된 작업을 하는데 드는 시간을 줄이는 활용방법이 있는지 찾아본다. (ex. 템플릿, 플러그인, 매크로, 스니펫, …) 3.2의 과정에서 나에게 맞는 것을 선택해서 체화한다. (무의식의 영역까지 가게 된다면 Best) 다시, 생산성 나만의 생산성을 늘리기 위한 파이프라인 구성하기
  35. 04 • 세션과 관련해서 긴 호흡의 대화를 나누고 싶은 분이

    계신다면 아래의 연락처로 언제든지 연락주세요. ◦ 이메일 : [email protected] ◦ 트위터 : @kodingwarrior • 참고하면 좋을 것 같은 자료들을 슬라이드에 담기엔 너무 방대하기에 블로그(겸 개인 위키)에 별도로 정리했습니다. ◦ https://kodingwarrior.github.io/wiki/appendix/excelcon-2nd • https://vim.kr <- Vim 디스코드 많은 관심 부탁드립니다. 마무리 다루고 싶은 내용은 많지만 여기까지…
  36. 04 • CLI 감성으로 회귀하고 싶다. • 내가 온전히 통제할

    수 있는 에디터를 원한다. • 최대한 마우스를 안 쓰면서 작업하고 싶다. • 에디터를 잘 사용하는 방법을 자유롭게 공유할 수 있는 개방적이고 따뜻한 커뮤니티와 함께 하고 싶다. 마무리 아래에 하나라도 해당이 된다면, Neovim을 영접해보는 건 어떨까요