처음 vi를 써보고
Linux를 처음 써볼때 vi 편집기를 접하고 경악을 금치 못했다. ‘세상에.. 어떻게 이렇게 불편하게 컴퓨터를 했지..?’ 지금 우리에게 익숙한 방향키 모양도 아니라 왼쪽 아래 위 오른쪽이 일자로 나열된 hjkl방식의 navigating방식은 너무나 생소한 것은 둘째치고, nomal mode, insert mode, comand-line mode가 나눠져 있어 거의 매순간 내가 무슨 모드에서 뭘 하고 있는지, 어떤 키를 눌러야 하는지 계속해서 확인해야 했다. 당연시 여겼던 마우스와 방향키의 중요성을 깨닫게 되었다.
마우스가 발명된 지금은 굳이 저런 불편한 vi편집기 따위 쓸일이 없겠지 하며 넘겼었는데 언젠가 코딩을 하는 어떤 유튜버가 마우스에 손도 대지않고 navigating을 아주 빠르게 하는 것이 너무 멋있어 보였다. 코드를 작성하거나 수정하는 속도가 나보다 2배는 빨라보여서 인터넷을 켜고 단축키를 찾기 시작했다.
가장 많이 사용하는 편집기인 vscode는 정말 많은 단축키를 가지고 있었고, 커스텀도 쉬워서 익순한 모디키들을 활용한 단축키를 사용할 수 있었다. 근데 방향키까지 가는거나 마우스를 집는거나 손이 이동하는 건 비슷했고, 모디열 키들을 누르는게 너무 불편했다. 이미 컴퓨터를 할때 대부분의 간단한 조작을 단축키로 하고 있었는데 특히 맥의 command키를 왼손 엄지로 누르는 것이 너무 불편했다. 왼손의 엄지손가락이 손바닥 아래로 말려 들어간상태로 command를 누르게 되는데 몇 개월, 몇 년이 되니까 아예 자판을 치지 못할 정도로 아팠다. 설마 커맨드 키를 누르다 손가락 부상을 당할줄은 몰랐기에 원인을 못찾다가 타이핑을 못할 정도가 되서야 알아챘다.. 한국에는 맥을 별로 사용하는 사람이 없어서인지 사례를 찾기 어려웠는데 구글에 ‘mac command thumb pain’이라고 치니 사례가 아주 많이 나왔다.
위 질문글에 달린 답변중에 이런 답변이 있었다.
Apple의 공식 사용설명서에서 손바닥 아래로 엄지가 말리는 것을 피하라고 권고하는 것을 보면 분명 이것이 좋지 않은 습관임을 알 수 있다.
다른 방법으로 부상은 해결했는데 코딩하는데 모디열을 사용한 조합키로 단축키를 더 만들면 너무 복잡해지고 어려울 것 같았다.
결국 Vim에 입문
다른 방법없나 하고 찾아보다가 결국 vim까지 가게되었다. 그렇게 싫어하던 vi편집기였다. 관련 자료를 찾아보니 쓰는 사람이 꽤 많았고 vim을 사용하는 사람이면 누구든지 어느정도 익숙해지기만 한다면 무엇보다 빠르고 편하게 코딩을 할 수 있다고 했다.
무엇보다 단축키는 어차피 둘다 익숙하지 않은데 그럴거면 확장성도 효율도 더 좋은 vim에 입문하는게 차라리 낫지 않은가 싶었다.
그래서 vscode에서 vim extension을 깔아서 toggle을 시켜가며 조금씩 연습했다.
당시 외주를 받아서 개발을 하던때였는데 vim이 익숙하지 않다보니까 급하면 자꾸 vim을 끄고 개발하곤했다. 점점 이도저도 안되고있다는 느낌을 받아서 따로 vim을 연습하는데 시간을 투자해서 효율을 끌어올려야겠다고 생각했다.
vim 단축키를 구글에 검색하니 이런 사진이 나왔다. 그냥 접을까 잠깐 생각했다..
다행히 좀 더 찾아보니 vimtutor라는 공식 tutorial이 있다는 것을 알게 되었다. (게임처럼 쉽게 연습할 수 있도록 하는 웹 사이트들도 많다.)
terminal을 열고 (사진은 iterm이다.)
vimtutor
를 입력해서 접속하면된다.
vimtutor ko
위 명령어를 사용하면 한글 버전으로 튜토리얼을 진행할 수 있다.
그럼 아주 쉽게 튜토리얼을 이용할 수 있다. 저런 표 외우느니 이거 두세번 하는게 훨씬 낫다고 생각한다. 굳이 다 할 필요도 없고 유용해 보이는 부분만 골라서 했다.
개발 시작하기 전에 한번씩 하고 개발하는식으로 3번 정도 하고나서 tutorial에서 자주사용하는 간단한 기능들은 전부 익숙한 정도로 사용할 수 있었다.
hjkl을 이용한 navigating과 단어이동, dd(한 줄 지우기), yy(한 줄 복사하기) 이 정도만 익숙해져도 마우스로 정확히 포인팅하거나 드래그 하는데 걸리는 시간이 정말 많이 줄어든다.
그 후로 좀 더 욕심이 생겨서 필요한 기능들을 조금씩 찾아서 익숙해졌다.
특히 조합 기능을 조금씩 사용하면서 부터는 정말 말이 안되게 편해졌다.
daw, yi{, di{, gg등 그냥 보면 오타처럼 보이는 단축키들도 익숙해지면 몸이 기억하듯 알아서 조합해서 사용할 수 있다.
그럼 소괄호, 중괄호, 대괄호등 그중에 어떤괄호의 문자를
지울지, 복사할지, 수정할지등 어떻게 조작할지 한번에 명령할 수 있다. 이전 명령도 반복해서 할 수 있고 redo와 undo도 쉽게 사용할 수 있다. 고인물들이 활용하는 것을 보면 마치 매크로를 입력한 것처럼 그냥 생각한대로 코드를 움직이고 조작한다.
지금도 난 vim의 정말 일부 기능만 사용하고 있다. 인터넷을 찾아보면 사람마다 즐겨쓰는 vim의 기능들이 모두 다른 것 같다. 당연하다. 사용하는 언어도, 분야도, 습관도 모두 다른데 정말 많은 기능의 vim에서 사람마다 활용법이 매우 다르다. 비슷한 명령도 사람마다 다르게 조합해서 사용하는 것 같았다. 그러니 혹시 vim에 입문하려거든 기능들을 처음부터 다 외우려는 시도는 하지않았으면 한다. 어차피 본인이 필요한 기능들만 남게 되니 본인이 필요로 하는 기능들을 찾아서 하나씩 더해가는게 좋은 방식인 것 같다.
Vim에 익숙해진 후기
그렇게 vim extension을 사용한지 4년정도 됐다. 처음 vi편집기를 사용할때에는 코딩 속도가 10분의 1정도로 줄어든 느낌이었는데 지금 vim단축키 없이 코딩하려고 하면 코딩 속도가 절반쯤 될 것 같다.
메모앱에서도 vim 플러그인을 설치해서 사용하고, 사용하는 키보드에서는 방향키를 없애버리고 Fn키와 hjkl키의 조합으로 방향키를 대신해서 사용한다.
잠시 타이핑을 쉬면 마치 중립상태를 확인하기 위해 기어봉을 흔드는 것 처럼 normal모드인 것을 확인하려고 esc키나 jk를 연타하곤 한다. 웹서핑을 하다가도 나도모르게 vim단축키를 누르고 있는 것을 발견할 때가 많다.
예전에는 리눅스나 터미널에서 파일을 수정할때면 마우스가 안되는게 너무 불편해서 파일을 따로빼서 텍스트편집기로 수정하거나 했었는데 이젠 반대로 Vim 명령어를 사용하지 못하는 메모장이 불편해서 terminal이나 vscode를 켜서 파일을 수정한다..
그리고 정말 그럴일 없을 것 같았는데 생각보다 터미널에서 코딩을 하거나 파일을 수정을 해야할 때가 많다. 정말 은근히 많다. 물론 어떤 분야인지, 어떤 상황인지에 따라 천차만별 이겠지만 SSH로 원격 서버에 접속해 작업을 하거나, 로컬에서 VM을 설치하더라도 리눅스에서 작업을 하거나, 터미널에서 로그파일을 분석하거나, git commit을 작성하거나.. 코딩을 하다보면 꽤 많이 쓰게 되는데 그때마다 vi편집기의 불편함을 불평하곤 했었다. 이제는 IDE에서 코딩하듯이 익숙하게 작업할 수 있다.
위에서 말했듯이, 난 정말 몇 개 안되는 기능들만 사용하는데도 엄청난 효율 상승을 느꼈다. 딱히 더 복잡하고 어려운 기능을 찾아서 공부할 필요는 못느끼고 있다. IDE의 기능들과 적절히 조합해서 사용하고 있다. 그렇다고 무조건 Vim이 좋아서 모두 이 방식에 익숙해져야한다는 것은 당연히 아니다. 이미 높은 효율로 작업하는 자기만의 방식이 있는데 굳이 따로 학습하면서 까지 Vim으로 갈아탈 이유는 없는 것 같다.
하지만 그냥 무서워서 아무것도 안해보는 것은 정말 비추한다. 단축키든 Vim이든 매크로 패드든 정말 초기의 아주 작은 투자로 엄청난 효율 상승을 이끌어 낼 수 있는데 그냥 지금 익숙한 환경이 조금 달라지는게 두려워서 시도도 안해보는 것은 잘 이해가 되지 않는다. 복잡해 보이는 단축키도 사용할때마다 피로감을 느끼는 것이 아니라, 한번 익숙해지고 나면 더이상 어떤 비용 지불 없이 사용할 수 있다. 만약 누군가 Vim을 사용해볼까 고민해본다면 정말 강력 추천한다.
개발을 할때면 사실 코드를 작성하는 시간보다 브라우저에서 더 많은 시간을 보내게 되는 경우가 많은데 웹 브라우저를 쉽게 조작하는 단축키들만 설정해서 사용해도 효율이 미친듯이 올라가는 것을 체감할 수 있다. Vim처럼 너무 많은 기능이 있는 도구를 갑자기 사용하는게 부담스럽다면 지금 가장 많이 하는 작업을 더 쉽게하는 단축키를 하나씩 설정하는것을 추천한다.