Vim 입문기

어쩌다 Vim을 쓰게 되었나요?

  • 생산성을 높이기 위해서 Vim을 쓴다는 얘기를 어디선가 듣게 되었습니다.
  • 개발하는 주변 친구들도 한 번씩은 써본 경험이 있고, 회사에 Vim을 쓰는 동료들도 있다고 들었습니다.
  • 개발 공부를 처음 시작할 때부터 VS Code로 시작해 항상 VS Code만 써왔는데, 혹시 Vim이 이를 월등히 뛰어넘는 좋은 대안이 될 수 있지 않을까 기대를 품고 정보를 찾기 시작했습니다.

입문하기 위해 파고들 때 미리 알았으면 좋았을 것

  • Vim은 단순 텍스트 편집기입니다.
  • neovim, 또는 nvim은 Vim 기반으로 다양한 플러그인을 통해 확장해 쓸 수 있는 프로그램입니다.
    • nvim는 내장 플러그인 netrw를 통해 파일 탐색기 기능을 제공합니다. 터미널에서 $ nvim .을 찍으면 현위치에서 netrw를 열어줍니다. 이를 통해 VS Code에서 폴더를 여는 것과 같은 상태가 됩니다.
    • 따라서 ‘Vim을 활용해 개발하고 싶다’면 nvim을 써야합니다. 이를 세팅하는 자세한 내용은 다음 포스팅에 작성하고자 합니다.

처음으로 찾은 정보

  • Vim 제대로 가르쳐 줌 🤓 (개발자라면 한번쯤 꼭 쓴다는 Vim)
    • 드림코딩 영상은 항상 무난히 잘 정리된 정보를 줍니다.
    • Vim이 마우스 사용 시간을 현저히 줄여주는 편집기라는 사실을 이때야 알았습니다.
    • 한평생 마우스와 살았고, 여러 단축키 조합으로 괜찮은 코드 작성 속도를 내고 있다고 생각했는데, 이를 떠나는 게 맞는 건가 생각해봤습니다.
    • Vim이 이런 거구나하고 알아보기엔 적당한 영상이라고 생각하지만, ‘그래서 이걸 왜 쓸까’라는 생각을 지우긴 쉽지 않았습니다.
    • 그래도 이를 활용하는 사람들이 있다면 분명 이유가 있을 거라 생각하며 더 파고들었습니다.

적응한 과정

  • VS Code에 Vim 플러그인 설치
    • VS Code를 똑같이 쓰지만, 편집 기능을 활용할 때 Vim과 유사한 느낌으로 코드를 작성할 수 있습니다.
    • 처음부터 터미널 속으로 들어가려면 그 전에 알아야 할 것들도 많고, 익숙하지도 않기 때문에 잠시나마 이를 통해 적응 기간을 가질 수 있어 좋았습니다.
    • 처음에는 굉장히 어색해서 500B짜리 문제 풀이 코드를 짜는 데 정말 많은 시간을 들였습니다. 아마 많은 분들이 Vim을 사용하려고 했다가 이런 끔찍한 뇌정지를 경험하고 관두게 될 것 같단 생각도 했습니다.
  • vimtutor
    • 가장 빠르게 중요한 기능을 둘러볼 수 있는 방법이라 생각합니다.
    • Vim을 설치할 때, 전체 파일에 대해 설치를 했다면 터미널을 열고 $ vimtutor라고 입력하는 것으로 Vim 튜토리얼을 진행할 수 있습니다.
    • 튜토리얼을 진행하면서 Vim의 기본 동작에 대해 이해할 수 있습니다.

반드시 익혀야 할 필수 조작법

  • h, j, k, l - 각각 좌하상우로 커서를 움직입니다.
  • i, I, o, O, a, A - 편집모드 진입하는 방법들입니다.
  • esc, ctrl + [ - 노말모드로 빠져나오는 escape 동작 키입니다.
  • :q, :w, :wq, :q!, :w! - 편집 중인 파일에 대한 종료(q), 저장(w) 그리고 강제 명령(!)입니다.
  • /{wordToFind}, ?{wordToFind} - wordToFind에 대한 하향식, 상향식 탐색을 수행할 수 있습니다.
  • c, d, y - 명령. 이후 vim motion을 통해 동작을 수행하여 내용을 바꾸거나(c, change) 지우거나(d, delete) 복사(y, yank)할 수 있습니다.
    • 이를 한 줄에 대해 수행하기 위해서 yy, dd 명령이 있습니다.
    • 이를 y2j나 d5k와 같은 식으로 응용하면 아래로 2j 위치에 있는 줄까지 복사하고, 위로 5k 위치에 있는 줄까지 지울 수 있습니다.
  • i, a - in과 관사 a를 뜻하며, daw, ci(와 같이 활용될 수 있습니다.
    • daw: 한 단어를 지운다.
    • ci(: 괄호 안에 있는 내용을 변경한다.
  • f, t - forward와 to로, 현재 위치부터 지정하는 문자의 위치까지 커서를 블록지정해줍니다.
    • dfz: 현위치에서 우측에 최초로 발견되는 z를 포함한 블록을 지운다.
    • yt(: 현위치에서 우측으로 최초로 발견되는 여는 괄호 전까지의 내용을 블록처리하고 복사한다.
  • v, V: 각각 visual 모드와 visual line 모드로 진입합니다.

필수 참고자료


그래서 Vim을 왜 쓰나요?

  • 이 시점에서 말할 수 있는 건 ‘재밌다’ 뿐입니다. 키보드로 커서를 조작하는 명령을 내리고, 이를 편집 명령과 조합하여 활용하는 과정 자체가 작은 게임을 하는 것 같습니다.
    • 다만, 그냥 익숙하게 기본 명령만을 활용해서 편집을 다 진행하고자 하면 당연히 불편할 수밖에 없습니다.
    • 훨씬 많은 키를 눌러야 하고, 그럴 바엔 차라리 마우스로 원하는 만큼 드래그를 한 뒤 복사나 붙여넣기를 하는 게 편할 것입니다.
    • 그러니 배운 명령들을 잘 활용하고 있는지 한 번씩 점검하며, 잊고 있던 단축키를 다시 확인하는 과정이 반드시 필요하다 생각합니다.

Vim에 대한 의견들과 그에 대한 생각

  • 다들 Vim에 대해서 다른 의견을 말합니다. 누구는 불편하고 구세대의 유산이며, 마우스로도 동일한 작업을 충분히 빨리 할 수 있는데 왜 써야 하는지 모르겠다는 의견도 많습니다.
  • 개인의 숙련도에 따라 다를 수밖에 없겠지만, 정말 Vim을 통해 빠른 개발이 가능한지는 좀 더 두고 볼 일인 듯합니다.
  • 또한, 새로운 것에 대한 모험을 할 필요성을 못 느낀다면 차라리 지금 쓰고 있는 툴을 마스터하는 게 더 도움이 될 것이라 생각합니다.

맺음말

  • 저는 현재는 nvim 세팅까지 한 상태입니다.
  • 한동안은 이 환경으로 개발하고 공부하는 과정을 진행해보고자 합니다.
  • 다음 Vim에 대한 포스팅은 nvim을 설정하는 과정에서 겪은 것들에 대해 작성해보고자 합니다.