Vim과 함께한 10년
처음 우연히 Vim을 열었을 때 고장 난 줄 알았습니다. 키를 누를 때마다 화면이 예측할 수 없는 방식으로 바뀌었고, 실행을 취소하고 빠져나가고 싶었습니다. 말할 필요도 없이 불쾌한 경험이었습니다. 그럼에도 계속 다시 찾게 만드는 무언가가 있었고, 결국 제 주력 에디터가 되었습니다.
10년이 지난 지금(!)도 여전히 Vim을 쓰고 있습니다. TextMate와 Atom, PhpStorm 등 여러 에디터를 써 봤지만 결국 다시 Vim이 가장 편합니다. 사람들이 자꾸 묻습니다. 왜 그러냐고요?
왜 Vim인가?
Vim 이전에는 메모장이나 nano 같은 에디터를 썼습니다. 그 에디터들은 대체로 예상한 대로 동작했습니다. 텍스트를 입력하고, 방향키나 마우스로 커서를 움직이며, Control + S를 누르거나 메뉴 바를 이용해 저장했습니다. VI(그리고 그 정신적 계승자인 Vim)는 다릅니다.
Vim에서는 모든 것이 다릅니다. 그래서 그토록 강력한 것입니다. 설명해 드리겠습니다.
Vim의 철학
Vim의 철학이 와닿기까지는 시간이 좀 걸립니다. 다른 에디터가 텍스트 작업의 중심을 작성에 두는 반면, Vim은 편집에 둔다는 점입니다.
사실 저는 대부분의 시간을 새로운 텍스트를 작성하는 데 쓰지 않고 기존 텍스트를 편집하는 데 씁니다.
텍스트를 빚고, 다듬고, 뒤집습니다. 글쓰기는 장인 정신이 필요한 고된 작업입니다. 생각이 어느 정도 일관된 형태를 갖출 때까지 차가운 맨손으로 빚어내야 합니다. Vim은 이 고통스러운 과정을 조금이나마 견딜 만하게 만들려 합니다. 통제력을 유지하도록 돕는 것이죠. 텍스트를 수정하는 날카롭고 효율적인 도구를 제공함으로써 그렇게 합니다. Vim의 핵심은 텍스트를 편집하기 위한 언어입니다.
언어로서의 Vim
Vim 명령어는 암호 같지 않습니다. 이미 다 알고 계십니다.
- undo, 즉 실행 취소하려면
u를 입력합니다. - 다음 t를 find하려면
ft를 입력합니다. - delete a word, 즉 단어 하나를 삭제하려면
daw를 입력합니다. - change a sentence, 즉 문장 하나를 변경하려면
cas를 입력합니다.
대부분의 경우 실행하려는 동작과 대상을 떠올린 뒤 각 단어의 첫 글자만 따면 올바른 명령어를 추측할 수 있습니다. 한번 해보세요! 뭔가 잘못되더라도 언제든 ESC를 누르고 u로 실행 취소하면 됩니다.
동작: delete, find, change, back, insert, append,…
대상: word, sentence, parentheses, (html) tag,… (:help text-objects 참고)
텍스트 입력 역시 i로 실행하는 또 하나의 편집 동작일 뿐입니다. 그래서 기본적으로 Vim은 이 모든 동작이 통하는 노멀 모드 — 커맨드 모드라고도 불리는 — 에서 시작합니다.
이 원리를 알게 되면 Vim이 훨씬 더 이해하기 쉬워지고, 그때부터 생산성이 올라가기 시작합니다.
세월이 흐르며 달라진 나의 작업 방식
초보 시절에는 Vim을 오래 쓴 사람들이 에디터를 어떻게 활용하는지 무척 궁금했습니다. 이제 오래 쓴 입장에서 답을 드리자면, 특별한 비법은 없습니다. 하루 종일 텍스트를 편집하고 나서 확실히 덜 지치게 되긴 했지만, 제가 쓰는 명령어의 90%는 포스트잇 한 장에 다 들어갑니다.
그렇다고 해도 세월이 흐르며 Vim 습관은 분명 달라졌습니다.
몇 가지 시기를 거쳤습니다.
1년 차: 텍스트를 입력하고 다시 빠져나올 수 있으면 감지덕지입니다.
2년 차: 멋지네, 단축키를 더 배워 보자.
3~5년 차: 모든 기능을 다 넣어 보자!!!
6~10년 차: .vimrc가 다섯 줄입니다.
3년 차에 Vim 생태계를 본격적으로 파고들기 시작했습니다. MacVim 같은 여러 변종과 janus 같은 배포판을 두루 시험해 봤습니다. 한동안은 거의 400줄에 달하는 나만의 Vim 설정을 직접 관리하기도 했습니다.
물론 그 모든 과정 덕분에 어떤 것들이 있는지 알게 됐지만, Vim 초보자에게 꼭 권하고 싶은 방법은 아닙니다. 사실 그런 것들이 꼭 필요한 건 아닙니다. 그냥 기본 상태의 Vim부터 시작하세요. 그것만으로도 충분히 좋습니다!
지금 제 Vim 설정은 상당히 미니멀합니다. 플러그인도 더 이상 쓰지 않습니다. 대부분 귀찮아서이기도 하고, Vim에 내장된 명령어나 매크로로 대체할 수 있기 때문입니다.
제 작업 방식이 세월이 흐르며 어떻게 달라졌는지 구체적인 예 세 가지를 들어 보겠습니다.
처음에는 “숫자를 붙인 이동”을 많이 썼습니다. 이를테면
b가 텍스트에서 단어 하나 뒤로 가는 명령어라면5b라고 하면 다섯 단어 뒤로 갈 수 있습니다. 요즘은 더 빠르기 때문에/로 원하는 단어를 찾아 이동하는 편입니다.텍스트 안에서 이동할 때 방향키를 더 이상 쓰지 않고
h,j,k,l을 쓰도록 스스로를 훈련시켰습니다. 많은 사람들이 그게 더 빠르다고 말합니다. 몇 년간 시도해 본 결과 제게는 꼭 그렇지만은 않은 것 같습니다. 지금은 그냥 습관이 되어 계속 쓰고 있습니다.주로 쓰는 컴퓨터에서는 빠른 텍스트 편집에는 Vim을 쓰고, 프로젝트 작업에는 멋진 Vim 플러그인을 얹은 Visual Studio Code를 씁니다. 이렇게 하면 두 세계의 장점을 모두 누릴 수 있습니다.
여전히 헤매는 것들
이렇게 오래 썼는데도 저는 아직 Vim 고수가 아닙니다. 한참 멀었습니다. 다른 모든 Vim 사용자가 말하듯, 우리는 모두 아직 배우는 중입니다.
아직 더 잘하고 싶은 몇 가지는 다음과 같습니다.
- 긴 텍스트 안에서 이리저리 이동하기: 검색(
/), 짝이 맞는 괄호로 이동(%), 특정 줄로 이동(예를 들어 10번째 줄이라면10G) 같은 기본은 알고 있지만, 탐색할 때 심볼을 더 자주 활용할 수 있을 것 같습니다. - 텍스트를 옮길 때 비주얼 모드 활용하기: 옮기고 싶은 텍스트를 잘라내기(삭제)하려고 올바른 글자 조합을 입력하는 게 때로는 꽤 복잡합니다. 그럴 때 비주얼 모드(
v)가 빛을 발합니다. 선택한 텍스트를 하이라이트해 줍니다. 더 자주 써야겠습니다. - 복사·붙여넣기를 위한 다중 레지스터: 지금은 텍스트를 복사할 때 레지스터(마치 붙여넣기용 임시 저장소 같은 것)를 하나만 쓰고 있지만, Vim은 여러 레지스터를 지원합니다. 한 번에 여러 개를 옮기고 싶을 때 유용합니다. 더 활용해 봅시다!
- 탭: 탭이 어떻게 동작하는지는 알지만 입력이 꽤 번거롭게 느껴집니다. 그래서 제대로 활용해 본 적이 없습니다. 대신 여러 터미널 탭이나 Vim 키 바인딩을 지원하는 IDE를 큰 프로젝트에서는 주로 씁니다.
다시 Vim을 배울 것인가?
답하기 어려운 질문입니다.
한편으로는 아니라고 답하고 싶습니다. Vim은 학습 곡선이 가파르고, 요즘 현대적인 IDE들이 사용자의 의도를 점점 더 잘 파악하게 되면서 텍스트 편집 자체가 전반적으로 훨씬 쉬워지고 빨라졌습니다.
다른 한편으로, Vim은 제가 생각과 코드를 가장 빠르게 적어 내려가는 방법입니다. 덤으로 어떤 컴퓨터에서든 동작하고 앞으로 수십 년간 건재할 가능성이 큽니다. 반면 IntelliJ 단축키가 10년 뒤에도 유효할지는 모르겠습니다 (참고: 이 글을 미래에 읽으며 “IntelliJ가 뭐지?”라고 묻고 있다면, 아마 아닐지도 모릅니다).
정리하며
하나만 조언하자면, 명령어를 외워서 Vim을 배우려 하지 마세요. 대신 지금의 작업 방식을 돌아보고 어떻게 개선할 수 있을지 고민한 뒤, Vim이 그 과정을 어떻게 더 쉽게 만들 수 있는지 살펴보세요. 다른 사람들이 Vim을 쓰는 모습을 보며 영감을 얻는 것도 도움이 됩니다(Youtube 링크, 소리 포함).
여러분은 텍스트를 작성하는 데 많은 시간을 쏟게 될 것입니다. 그래서 하나의 에디터를 제대로 익히는 데 시간을 투자할 가치는 충분합니다 — 특히 프로그래머라면 더욱 그렇습니다.
10년이 지나자 Vim은 제 머릿속에 깊이 배어 있습니다. 텍스트를 편집할 때 저는 Vim으로 생각합니다. 이제는 하나의 자연스러운 언어가 되었습니다. 앞으로의 10년이 기대됩니다.
글을 무작위로 읽기