그동안 VIM으로 갈아타려고 여러가지 공부를 해오고, 이제 슬슬 그럭저럭 쓸만하구나, 라는 판단이 서서 지금까지 느낀 점을 공유해볼까 합니다.

Why VIM?

  • 더 적은 타이핑
  • 더 적은 마우스 조작
  • 서버 작업 시의 편의성 향상
  • 사용 가능한 키보드의 종류 넓히기
  • 일관성 있는 설정 관리
  • 역시 CLI에서 개발하는 것은 개발자의 로망아니겠습니까

위와 같은 이유로 슬슬 서브라임도 맘에 안들던 차에 공부를 시작.

How to

vimtutor

우선 vimtutor로 가볍게 시작했습니다. 관련 글은 이쪽. vim을 설치하면 함께 설치되며 기본적인 조작법을 배울 수 있고, 무엇보다 자연스럽게 직접 기능들을 사용해볼 수 있게끔 배려된 부분이 무척 좋습니다. 한글 번역도 있으니 부담없이 접해볼 수 있습니다.

Practical VIM

그 다음으로 보기 시작한 책입니다. 추천을 받아 우연히 보게 된 책인데, VIM을 배우고 싶다면 이 책은 꼭 보세요. 정말 추천드립니다. 이 책의 장점 중 하나는 각 예제에서 어떤식으로 키를 입력해야하는지, 각 키를 입력하면 어떻게 동작하는지에 대해서 정말 친절하게 보여준다는 점입니다. 예제가 이런 느낌이에요.

// []는 커서의 위치
{start} => The end is nig[h]
db => The end is [h]
x => The end is[ ]

덕분에 각 키입력이 어떤 동작을 하는지 쉽고 확실하게 이해할 수 있습니다.

더불어 책은 여러 개의 팁 모음집으로 구성되어 있어서, 읽고 나서 필요할 때에 필요한 팁을 찾아볼 수 있습니다. 예를 들어 “수식 연산같은건 어떻게 했더라?”와 같은 상황이라면 Tip 10. Use Counts to Do Simple Arithmetic를 보면 바로 확인할 수 있죠. 이 책을 다 읽고나면 나도 이제 실무에서 vim을 쓸 수 있을거 같아! 같은 착각을 할 수 있게 됩니다. 다만 여기서 끝은 아닙니다. 이 책에서는 가급적 vim 자체만으로 할 수 있는 기능들에 집중하고 있기 때문에, 실제로 사용하게 되면 높은 확률로 사용하게 될 플러그인에 대한 정보들이 적습니다. 그래서 불편한 부분이 생기면 하나씩 필요한 플러그인을 찾아가게 됩니다.

Plugin

지금 사용하고 있는 .vimrc 설정은 여기에서 확인할 수 있습니다. 플러그인 매니저로는 Vundle을 사용하고 있습니다. 이외에도 몇가지 더 있는 모양이지만, 개인적으로 가장 맘에 들었던 것 && 왠지 많이 쓰는 것 같아서 채택. 아무튼 돌아와서 지금 사용중인 플러그인을 간단히 소개합니다.

  • SirVer/ultisnips: 스니핏 생성용. 생각보다 별로 안쓰고 있어서 지울까 싶습니다[..]
  • ctrlpvim/ctrlp.vim: 파일간 이동을 위해서 깔았던 플러그인. 하지만 ctags + buffer 조합이 생각보다 편해서, 그리고 node_modules 때문에 초기 로딩시간이 꽤 길어져서 점점 안쓰게 되고 있는 실정입니다. 특정 폴더를 무시하는 설정이 있으니 이걸 좀 활용해보거나 은퇴시킬듯…
  • tpope/vim-surround: 큰/작은 따옴표나 감싸는 태그를 좀 더 쉽게 처리할 수 있게 해주는 플러그인. 단축키가 좀 귀찮긴하지만 나름 유용합니다.

장점/단점

두 달 정도 사용하면서 느낀 장단점은 다음과 같습니다.

장점

  • 평소 코딩하면서 각 줄당 최대 80자를 사수하려고 하는 편이라서 그런지, 화면 분할이 꽤 용이합니다. 좌우로 나누면 딱 80자 길이로 나눠줘서 매우 마음이 편한 느낌.
  • 방향키를 직접 조작할 일이 줄었습니다. 물론 hjkl는 열심히 쓰고 있지만, 일단 오른손이 오르락내리락하지 않는다는 점만으로도 나름의 장점.
  • 타이핑 횟수가 조금 줄었습니다. 아래에서 설명하겠지만, 스트로크를 줄이려면 생각을 해야해서…
  • 매크로가 매우 유용합니다. 예를 들어, 단순한 치환으로는 처리하기 어려운 엉망인 html 태그 클리닝 작업(쓸모 없는 클래스 지우기, 인던트 정리하기 등등) 등을 간편하게 할 수 있습니다.

단점

  • 파일간 전환이 간편하지 않습니다. Ctrl + [, Ctrl + ]로 편하게 움직이다가 버퍼나 CtrlP 플러그인을 쓰려니 생각보다 불편하네요. 처음에는 꽤 큰 문제였는데, 지금은 그냥 화면 쪼개서 다 여는 것으로 해결하고 있습니다.
  • 코드 전체를 훑어보기가 어렵습니다. 저번에 스크롤이 불편해서, 라는 의견을 받고 당시에는 그건 아닌거 같다, 라고 생각했는데 이제와서 생각해보면 납득이 가는 의견. 찾아보면 페이지 단위로 움직일 수 있는 플러그인이 있지 않을까 싶긴합니다. OTL
  • 여러 파일에 걸쳐서 치환하기가 어렵습니다. 정확히 표현하자면 타이핑 횟수가 많습니다. 범위 지정해서 vimgrep하고 cfdo로 치환하고 파이프로 update해주고… 아무튼 그래서 플러그인으로 좀 쉽게 커버해볼까 고민중입니다.
  • 생각보다 스트로크를 줄이기가 어렵습니다. 처음이라 더 그렇겠지만, A라는 결과를 얻기 위해서 취할 수 있는 방법은 꽤 다양해서, 그 중에서 가장 적은 키 스트로크로 결과를 얻을 수 있는 방법이 무엇인지 항상 고민해야합니다. 생각을 포기하는 순간, 방향키를 무심하게 누르는 자신을 발견할 수 있습니다.
  • 파일에 영어 이외의 것을 입력하지 않게 됩니다. 영어가 아니면 명령어 입력이 되지 않기 때문이죠. 그래서 normal mode로 돌아가면 영어로 자동 전환해주는 karabiner 플러그인을 넣었는데 동작하질 않아서… 눈물을 머금고 그런 작업이 필요할 때는 그냥 별도의 에디터를 쓰고 있습니다.

결론

위만 보면 단점이 꽤 커보입니다. 이것만 놓고 보면 왜 굳이 갈아타죠? 같은 생각도 할 법한데, 막상 쓰다보면 이게 또 묘하게 편해서 버려야겠다는 생각은 안듭니다. 그리고 좀 잘 쓰려고 노력하는 만큼 보답을 해주는 도구라는 느낌이 커서일까요?

생각보다 VIM은 어렵지 않습니다. 하지만 잘 쓰기도 쉽지 않은 도구라는 걸 절실히 느끼는 두 달이었네요. 한동안 서브라임과 VIM의 기묘한 동거가 계속될 것 같습니다. 🙂