tools/vim

Learn Vimscript The Hard Way 후기/리뷰(review)

seul chan 2020. 5. 24. 15:47

Learn vimscript the hard way를 읽은 뒤의 후기

개발을 처음 시작하였을 때 부터 vim을 사용하기 시작하였지만

"Practical Vim", "Pro vim" 등 몇몇 책을 보거나 vimgolf, vim-adventure (vim을 하는 게임)을 해보기는 했지만 vim을 제대로 공부해본 적은 없었다.

그러다 보니 항상 사용하는 명령어만 사용하거나 모르는 것이 생기면 그때 그때 찾아서 사용하는 정도였다.

그러던 중 회사에서 Google BigQuery를 도입하는 일이 생겼다. 기존에는 postgres를 사용하여기 때문에 postgres client로 터미널 환경에서 쿼리를 날리기가 쉬웠지만, BigQuery는 무조건 웹 콘솔을 사용해야 하는 문제가 있었다.

DBeaver, Datagrip 등에서 커넥션을 제공해주기는 하였지만 어짜피 터미널에서 실행시키지는 못하므로.. vim에서 bigquery api를 사용하여 특정 파일의 결과를 확인할 수 있으면 어떨까? 하는 생각이 들었다.

처음에는 간단한 명령어로 해결하려고 했지만 생각보다 이런저런 문제에 많이 부딪혀서 이를 plugin 형태로 만들어보기로 하였다.

대부분의 vim 플러그인은 vimscript 언어를 사용하여 작성되기 때문에 vimscript를 배워보고자 자료를 조금 찾아보았더니 vim 자체 documentation과 함께 Learn Vimscript The Hard Way라는 책 추천이 많았다.

총 56 챕터로 이뤄진, 갈다면 길고 짧다면 짧은 책이다. 처음에는 기초 vim 설명부터 시작되기 때문에 5~10장까지는 막힘없이 술술 읽어나갔지만, 그 다음부터 조금씩 어렵고 귀찮아지면서 작심삼일(...)로 한참을 거기에서 멈춰 있었다.

그러다가 2020년 3월에 뒤늦은 2020년 계획(?)을 세우면서 "매일 vimscript 한 챕터씩 읽기"를 목표로 설정하였다. 특별한 이유가 있었던 것은 아니였고, 뭔가 하루에 하나씩 습관처럼 하고 싶었는데 기존에 해 보았고 배우고자 하는 마음도 있었기 때문에 선택하였다.

그렇게 두어달 동안 (챕터가 너무 길면 한 번에 다 못 읽고 2-3 파트로 나누었기 때문에 실제로는 꽤 더 걸렸다) 거의 하루도 빠짐 없이 읽었던 것 같다. 읽고 정리(사실상 거의 번역)한 내용을 블로그에 올렸다.

재밌게 읽어서 더 하고 싶은 날도 있었고, 힘들고 하기 싫은 날들도 많았다. 그리고 어느새 마지막인 56챕터까지 읽게 되었다. 만세!

나는 본래 계획충이고, 몰아서 하는 사람이라 항상 시작은 거창하게 하고 끝을 내지 못하는 경우가 많았다. 이번 일을 계기로 하고자 하는 의지와 마음만큼이나 조금씩 꾸준히 그냥 "하는 것"이 중요하다는 것을 많이 느꼈다. 플러그인을 만들고 싶은 마음이나 vimscript를 배우려는 의지만으로는 절대로 끝까지 못 읽었을 것 같다.

책 자체는 꽤 읽기 쉽게 되어있다. vim을 기존에 사용하고 있던 사람이라면 이 책을 읽으면서 조금 더 심화된 vim의 기능이나 vimscript의 기초를 익힐 수 있을 듯 하다. 특히 대부분의 장이 예시를 직접 따라하는 방식으로 작성되어 있기 때문에 읽으면서 지루하지 않고, exercise들을 연습하면서 직접 코드를 쳐 볼 기회가 많다.

반대로 말하자면, vimscript를 기초부터 탄탄하게 배우고 싶거나 (그런 사람이 있을지는 잘 모르겠지만...) 잘 정리된 학술적인 책은 아니다. 뿐만 아니라 작성된 지 꽤 지난 글이기 때문에 조금 outdated 된 부분도 있다. (plugin manager에 대한 설명으로 pathogen를 사용한다던지..) 그럼에도 불구하고 vim을 사용하면서 .vimrc는 잘 사용하지 않는 사람들에게는 어떤 것들이 있고 무엇을 사용하면 좋을지에 대한 단서를 제공해주는 좋은 책이라고 할 수 있겠다.

사실 제목은 vimscript이지만 굳이 vimscript를 배우고 싶어 하지 않더라도 vim을 조금이라도 커스터마이징 하여서 사용하려는 사용자라면 충분히 유용한 정보를 많이 얻을 수 있을 것이다. (vim을 커스터마이징 하지 않고 사용하기가 더 쉽지 않기 때문에.. 대부분의 vim 초급 사용자에게 추천한다)

내가 아주 유용하다고 느꼈던 몇몇 챕터를 소개하겠다.

  • Mappings: 03. Basic Mappings, 04. Modal Mappings, 05. Strict Mappings
    • 그냥 복붙으로만 사용하였던 mapping에 대한 기본적인 설명부터 잘 나와있다. 무엇보다 직접 만들어가면서 따라하는 방식이라 쉽게 이해된다.
  • functions
    • 사실 다른 프로그래밍 언어에서는 기본인 함수를 vim을 사용하면서는 잘 사용하지 않았었다. 이에 대한 기본적인 설명을 제공.
  • execute, normal, execute-normal
    • 그냥 간단하게 사용만 하던 명령어들에 대해서 자세히 알아볼 수 있었다.
  • regex
    • regex도 마찬가지. 그냥 적당히 정규표현식을 적용하면 되어서 그냥 사용하던 것들을 vim에서는 어떤 방식으로 regex를 사용하는지, 어떤 타입들이 있는지 등을 익힐 수 있었다.
  • grep operator case study
    • 요 부분은 강추한다. 직접 유용한 operator를 만들면서 평소에는 잘 쓸 기회가 없지만 유용한 기능들을 배울 수 있었다.
  • folding
    • 나는 기존에 folding을 사용하지 않았기 떄문에 folding에 관련된 장들도 흥미로웠다.
  • help
    • 책에서 소개하는 vim help 텍스트를 읽으면서 vim help documentation에 조금 친숙해졌다.

비록 조금 강압적인(?) 면이 있는 책이고, 자기 주관이 뚜렷한 작가가 적었기 때문에 강력하게 주장하는 부분도 없지 않지만 기본적인 vimscript의 사용법과 vim의 명령어들을 잘 설명해 두었기 때문에 관심있는 분들은 한 번 읽어볼 만 하다.

책 각 장의 exercise를 잘 따라하고 소개하는 :help도 읽기를 권장한다. 비록 exercise의 답은 없지만 정 필요하면 내 블로그에 정리한 각 장의 마지막을 참고하면 된다.