Decision to Vim #1. Buy M1 Air
Tags: vim, bash, terminal, mac
Published: 2022-08-08 06:34:00

## TL;DR

맥 사고 Vim 영업 당해서 적응하기

## 기존에 사용하던 뉴 서피스 프로 2017년

최근에 내가 사용하던 2017년형 뉴 서피스 프로 (당시 160~180만원)에서 성능 문제가 많이 일어났다. 내가 개발하는 React.js 웹 프론트엔드의 테스트 파일을 모두 돌리는데, 테스트 파일이 30개 내외도 안되고 크지도 않은데 정말 오래걸렸다. 또, 다른 개발자분과 줌을 하고 화면 공유를 할 일이 있었는데 발열도 심하고 프로그램도 꺼졌다. 그리고 화면 밝기 이슈가 있어서 구매 직후 교환을 두 번이나 했는데 감정소모도 심했고, 스트레스도 많이 받았다. 심지어 교환한 모든 제품들이 화면에 이상이 있었다. 이를 증명하기 위해서 MicroSoft 서비스 센터와 학교 수업시간에 문제가 있음을 증명해야했고, 환불 가능 기한은 지나가버렸다. 그렇게 너무 스트레스를 받아, 결국 3번째로 받은 불량 제품을 사용하기로 했다.

하지만 이는 잘못된 선택이었다. 발열도 엄청 심했고, 서피스 펜이 있고 화면이 터치가 된다는 장점은 거의 사용할 수 없었다. 그리고 전원이 연결되지 않으면 스스로 화면의 밝기가 변경되었고, 화면에도 어두운 부분이 존재했다. 

그렇게 사용하다가 최근에는, 전원 콘센트에 접지가 되지 않아, 서피스를 전원에 연결하고 사용하면 100% 충전이 되었을 때 키보드에 손을 올려놓고 터치패드를 움직이려고 하면 정전기로 터치패드가 작동하지 않고. 여튼 정말 온갖 지뢰는 다 밟아버렸다.

배터리도 오래 사용한 휴대폰 배터리처럼 광속으로 닳아버리고. USB 포트는 하나밖에 없고 HDMI 대신 Mini DP를 사용하기 때문에 어딜 가더라도 HDMI to MINI DP와 USB 허브도 갖고다녀야했다.

그래서 결국 샀다. M1 맥북 에어.

### M1 맥북 에어 구매

사실 나는 맥북을 사게 될 줄 몰랐다 결정을 하는데 그렇게 오랜 시간이 걸리지 않았다. 나는 취업을 준비하는 과정이라 용돈을 받아서 쓰는 입장이었고, 이런 불만 사항들이 있다고 대화를 나누던 중 살 수 있게 되어서 생각보다 어라라 하면서 구매하게 된 감이 없지 않아 있다.

당시 프로그래밍 컴퓨터 트위터에서 다른 분이 M1 에어를 구매했다는 트윗을 보았기에, 여쭤보아 쿠팡에서 로켓와우/카드 할인을 받아 140만원에 구입하고 바로 다음 날에 받을 수 있었다.

맥을 친구 노트북으로 사용해본 경험은 있지만, 이렇게 다를 줄은 몰랐다. 그래서 이것 저것 설정하고 환경설정을 하다가, 트위터에 질문을 올려보니 김충섭님의 [본격 macOS에 개발 환경 구축하기
](https://subicura.com/2017/11/22/mac-os-development-environment-setup.html?s=09) 글이 있었다. 나는 이 분 트윗과 게시글을 보고 회사 채용에 2번 지원하여 불합격한 경험이 있는데, 어쨌든 진짜 저명하신 분이구나... 하면서 봤다. 정말 깔끔한 글이었다. 2017년 11월에 처음 작성한 글을 2020년에 1차 수정, 2021년에 2차 수정되었다. HomeBrew의 명령어 중 cask 커맨드가 변경된 것만 빼면 다 완벽히 들어맞았다.

```txt
Error: `brew cask` is no longer a `brew` command. 
Use `brew <command> --cask` instead.
```

### 나의 기존 개발환경과 터미널/프로그램/명령어 관련 지식들

나는 개발에 입문하고 2016년에 학교에서 배급했던 HP 노트북, 2017년에 개인적으로 구매했던 뉴 서피스 프로 (윈도우, i5-7*** U, 8GB Ram), intel 윈도우 데스크탑 등을 사용했다. 임베디드 시스템을 학습할 때 라즈베리파이3를 사용해본 적도 있다. 

학교에서 실습하기 위해 wsl을 설치하거나 Windows의 PowerShell을 사용했고, 노트북에 듀얼부팅으로 우분투를 설치하여 잠깐 우분투를 사용해보고, 실습하던 임베디드 장비의 운영체제인 Linux 장비와 소통하면서 간단한 명령어를 사용해본 경험은 있지만, 아직까지 vim, 터미널에 대해 익숙하지 않았다.

간단한 C++ 프로그램의 컴파일 옵션도 잘 몰랐고, vim은 i, e, dd, y, p, esc, :q, :wq 등의 키 바인딩만 사용했으며 다른 개발자분들의 vim 영상처럼 샤샤샥 하면서 프로그램을 작성하는 것도 어려워했으며 터미널로 로그를 띄우거나 diff를 본다거나 했다.

git cui는 거의 add, commit, push, pull, config 설정, remote 등의 일만 했고 이조차도 검색을 하지 않으면 다 까먹어서 매번 검색했다.

비슷하게, 웹 프론트엔드를 학습하면서 배웠던 npm, yarn 명령어들과 윈도우의 git bash에서 돌아가는 프로그램의 옵션들 (예를 들면 webpack build 옵션이라던가)도 잘 몰랐다. 타인의 레포지토리의 package.json에 있는 build 명령어들을 그냥 사용했던 적도 있다. 이건 비단 프로그램 실행 옵션 뿐만 아니라 소스코드도 뜻을 모르고 따라쳤던 경우가 많았던 것과 비슷하겠지만... 

## 이대로는 안된다 - 자극 -

### VIMRC 2022의 파일 편집

그러다가 이렇게 계속 되면 안될 것 같다는 생각을 했다. 오프라인으로 Vim 교정학원 2022 행사가 열렸는데, ([유튜브 링크](https://www.youtube.com/watch?v=yWkVn4SSHn0&t=1724s)[페스타 링크](https://festa.io/events/2412)) 참여하고 싶었지만 참여하지 못했다. 그래서 영상으로 뒤늦게 강좌를 보려고 했는데, 영상 앞부분에 보면 나오지만 vim을 사용하여 참가자 정보가 담긴 xml 파일을 정규표현식을 사용하여 개인정보를 모두 제거하고 이름만 나오게 한 뒤 랜덤하게 셔플하여 참가자들의 발표 순서를 정하는 과정이 있는데, 너무 멋있었다. 내가 지금까지 프로그래밍을 하면서 수작업으로 데이터들을 만들거나, 정제하는 과정을 정말 많이... 해왔었는데. 그 방법 대신 저렇게 vim 명령어를 사용해서 슉슉슉 샤샤샥 할 수 있다니. 어느정도 알고는 있었는데, 동기부여가 빡 되었다.

### 클로저 밋업에서 Vim 발표라뇨

그리고 그 전에 그린랩스라는 회사에서 [클로저 밋업](https://event-us.kr/greenlabs/event/44735)을 열어 참가한 적이 있다. 클로저 관련 행사였지만 그린랩스라는 회사에 관심이 있었고, 한 번 지원했다가 불합격 메일도 못받고 불합격된 케이스지만... 프로그래밍과 vim으로 유명한 [종립님](https://github.com/johngrib)이 재직중이시라는 것은 알았다. 그래서 클로저 행사보다는 뒷풀이로 게더타운에서 있는 행사에 좀 더 의미를 두고 참석했다. 그런데 생각보다 클로저를 모르는 사람들에게 클로저라는 언어에 대해 잘 알려주는 발표들이 있어어 어렵지 않게 잘 들었고, 종립님의 클로저/Vim 발표를 정말 인상깊게 들었다. 

종립님의 발표는 Vim을 사용하는 진성 Vim 유저신데, 클로져 개발은 대부분 VS Code나 IntelliJ를 사용하기 때문에 클로져/Vim 플러그인 개발을 위해 많은 시간을 할애했고 어떤 기능들을 구현했는지 말씀해주셨다. 종립님의 발표 기술이 너무 매력적이어서, 정말 따라하고 싶다. 성격이나 말하는 방법 등이 매력적이었다. 

그리고 사실 이 행사 중 발표 세션은 유튜브 스트리밍으로 진행되었는데, 발표 슬라이드를 확대/축소하지 못하는 등의 이슈로 직접 프로그래밍을 하는 영상을 보여준다거나, 코드를 보여줄 때 너무 폰트가 작아서 보기 힘들었던 부분들이 있었는데, Vim에서 클로져 코딩을 하는 영상을 보여주는 슬라이드에서, 영상 촬영시 입력한 키가 보이는 프로그램을 사용하셔서 ([KeyCast](https://github.com/keycastr/keycastr)같은 프로그램을 사용하신 것 같다) 그것도 굉장히 좋았고. 아무튼 Vim을 사용해보고자 마음을 먹었던 때였다. 

그렇게 이종립님의 Vim/Clojure 영업과 VIMRC 2022의 화려한 손놀림에 휘감겨 터미널로 개발환경을 구성해보자! 고 생각하고 실행에 옮기게 되었다.