Vim과 함께한 10년
원문은 Matthias Endler님이 에 게재했습니다. 이 블로그 구독하기
처음 우연히 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를 입력한다. - 단어(word) 하나(a)를 삭제(delete)하려면
daw를 입력한다. - 문장(sentence) 하나(a)를 변경(change)하려면
cas를 입력한다.
대부분의 경우, 실행하고 싶은 동작과 그 대상을 떠올린 뒤 각 단어의 첫 글자를 따면 올바른 명령어를 추측할 수 있다. 한번 해보라! 뭔가 잘못되더라도 언제든 ESC를 누르고 u로 실행을 취소하면 된다.
동작: delete, find, change, back, insert, append,…
대상: word, sentence, parentheses, (html) tag,… (see :help text-objects)
텍스트를 삽입하는 것 역시 i로 실행할 수 있는 또 하나의 편집 동작일 뿐이다. 그래서 기본적으로는 이러한 모든 동작이 통하는 normal mode — 커맨드 모드라고도 불린다 — 에 있게 된다.
이걸 알고 나면 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을 쓰고, 프로젝트 작업에는 Visual Studio Code와 멋진 Vim 플러그인을 함께 쓴다. 이렇게 하면 두 세계의 장점을 모두 누릴 수 있다.
아직도 헤매는 것들
이렇게 오랜 시간이 지났는데도 나는 아직 Vim 고수가 아니다. 한참 멀었다. 다른 모든 Vim 사용자가 말하듯, 우리 모두는 여전히 배우는 중이다.
좀 더 잘하고 싶은 몇 가지는 다음과 같다:
- 긴 텍스트 안에서 이리저리 이동하기: 검색(
/), 짝이 맞는 괄호로 이동(%), 특정 줄로 이동(10번째 줄이라면10G) 같은 기본은 알지만, 이동할 때 심볼을 더 자주 활용할 수 있을 것 같다. - 텍스트를 옮길 때 비주얼 모드 활용하기: 옮기고 싶은 텍스트를 잘라내기(삭제)하려고 올바른 문자 조합을 입력하는 게 때로는 꽤 복잡할 수 있다. 그럴 때 비주얼 모드(
v)가 빛을 발한다. 선택한 텍스트를 하이라이트해주기 때문이다. 더 자주 써야겠다. - 복사와 붙여넣기를 위한 여러 레지스터 활용: 지금은 텍스트를 복사할 때 하나의 레지스터(마치 붙여넣기판 같은 것)만 쓰는데, Vim은 여러 레지스터를 지원한다. 여러 항목을 동시에 옮기고 싶을 때 유용하다. 더 많이 써보자!
- 탭: 탭이 어떻게 동작하는지는 알지만, 입력 과정이 좀 번거롭게 느껴진다. 그래서 많이 쓰지 않았다. 대신 규모가 큰 프로젝트에서는 주로 여러 개의 터미널 탭이나 Vim 키 바인딩을 지원하는 IDE를 쓴다.
Vim을 다시 배울까?
답하기 어려운 질문이다.
한편으로는 아니라고 답하고 싶다. Vim은 학습 곡선이 가파르고, 요즘 현대적인 IDE들이 사용자의 의도를 더 잘 파악하게 되면서 전반적으로 텍스트 편집이 훨씬 쉽고 빨라졌다.
다른 한편으로는, Vim은 내 생각과 코드를 적어 내려가는 가장 빠른 방법이다. 덤으로 모든 머신에서 동작하고 앞으로 수십 년간 계속 존재할 가능성이 높다. 반면 IntelliJ 단축키가 10년 뒤에도 유의미할지는 모르겠다(참고: 미래에 이 글을 읽으며 “IntelliJ가 뭐지?”라고 묻는다면, 아마 그렇지 않다는 뜻일 것이다).
핵심 정리
한 가지 팁을 주자면, 명령어를 암기하는 식으로 Vim을 배우지 마라. 대신 지금 자신의 작업 방식을 살펴보고 개선하려 노력한 뒤, Vim이 그것을 어떻게 더 쉽게 만들 수 있는지 살펴보라. 다른 사람들이 Vim을 쓰는 모습을 보며 영감을 얻는 것(사운드가 있는 Youtube 링크)도 도움이 된다.
텍스트를 쓰는 데 많은 시간을 쏟게 될 테니, 하나의 에디터를 정말 잘 배우는 데 시간을 투자할 가치는 충분히 있다. 특히 프로그래머라면 더욱 그렇다.
10년이 지나니 Vim은 어떻게든 내 머릿속에 각인되었다. 텍스트를 편집할 때 나는 Vim으로 생각한다. Vim은 내게 또 하나의 자연어가 되었다. 앞으로의 10년이 기대된다.
글을 무작위로 읽기
댓글
로그인하고 댓글 남기기