John Grib Profile picture
Apr 7 33 tweets 6 min read
벌써
Vㅏ
ㅁ 이군요...
오늘 오전에 언급한 cheat sheet 이야기를 해보겠습니다. 저는 치트시트를 꽤 좋아하는 편인데요, 예를 들어 제 홈페이지는 거대한 치트시트 컨셉으로 운영하고 있는 공간이기도 합니다. 그런데 vim 치트시트는 별로 좋아하지 않습니다.

이때 중요한 건 제가 좋아하지 않는다는 거지, 다른 사람들도 좋아하면 안된다는 게 아닙니다! 누군가는 이 치트시트를 매우 공들여서 만들었을 거고, 도움을 받은 사람들도 많을 겁니다. 제가 좋아하지 않는 건 개인적인 취향 때문이고, 누군가가 엄청 좋아한다 해도 저는 이해할 수 있습니다.
제가 좋아하지 않는 이유는 아주 심플한데요, 이 치트시트를 보고 있다 보면... 마치 암기과목처럼... 보인다는 것입니다. 치트시트 모양을 가만히 살펴보면 약간 주기율표처럼 보입니다. 물론 주기율는 짱이고 보기만 해도 즐겁죠. 게다가 저는 멘델레예프를 존경해요.
제가 생각하는 문제는 주기율표가 아니라 주기율표처럼 보인다는 것입니다. 그래서 이 표를 모니터 옆이건 벽이건 붙여놓고 달달 외워야 할 것 처럼 생겼죠. vim을 켜놓고 표를 슥 보고 음 이건 w... 하고 키보드 위에서 w를 찾아서 누르고 뭐 그런 행동이 연상되죠.
외워야 할 게 많은 것처럼 보이게 합니다. 그러면 외워야 할 게 많은 게 아니란 말이냐? 하면 할 말은 없네요. 네.. 외울 게 많긴 합니다.. 그런데 외울 게 많다고 해서 꼭 저렇게 외울 필요는 없잖아요?! 나중에 공부에 맛들이면 아 학교에서 그렇게 안 가르쳤으면 나도 이 과목을 좋아했을 거야 같은
생각을 하는 사람들도 있으니까, vim을 처음 접할 때 저런 무시무시한 치트시트보다 간단한 명령들의 조합으로 시작하면 어떨까 하는 생각을 종종 합니다. 저는 vim 명령이 일종의 언어라고 생각하는 사람이기도 하고, 초보가 실제로 알아야 하는 것이 훨씬 적다고 생각하기도 하거든요.
이 표는 제가 작성한 vim 초보에게 권장하는 vim 치트시트입니다. 아 지금 보니 Esc가 빠져 있긴 하네요. 그치만 제 트윗을 보시는 분들은 Esc는 알고 계실 거라 생각하고 넘어가죠.
d 는 삭제입니다. w 는 단어죠. 그래서 dw 는 "삭제해라 단어를.."
이 됩니다. (사실 w보다는 aw 나 iw가 단어이긴 하지만 넘어가죠)

이제 여기에 숫자를 붙여봅시다.

3dw 세번 해라.. 단어 삭제를...
이제 이걸 응용해서 다른 동사나 명사를 붙이면 됩니다.
y는 복사죠.

3yw 세번 해라.. 단어 복사를..
3p 세번 해라... 붙여넣기를...
3u 세 번 해라... 실행 취소를...

이렇게 기본 사용법만 알아두면 새로운 동사를 익힐 때마다 사용할 수 있는 표현의 양이 확확 늘어납니다. 즉 저는 치트시트를 전부 외울 각오로 시작할 필요가 없다고 생각해요. 몇 가지만 알아놓고 표현을 익힌 다음 천천히 하나씩
어휘를 늘려가면 충분하다고 생각합니다. 그래서 vim 치트시트를 보면 좀 갑갑한 느낌이 듭니다. 좀 더 자유롭게 익혀나갈 수 있다면 더 즐겁지 않을까 하는 감각인데, 학습에 대한 이야기이기도 하고 어떤 방식이 바람직한지는 개인마다 의견이 다를 수 있으니 제 생각이 맞는지는 잘 모르겠어요.
아무튼 저는 암기를 통한 방법보다는 친절한 튜토리얼을 통한 방법이 vim과 친해지는 데 더 좋은 기법이 아닐까 생각하는 사람이다보니 누가 vim 학습에 필요한 자료를 물어보면 vimtutor 를 권해드리곤 합니다. 이건 사용하기 쉬워요. 터미널에서 vimtutor를 치면 끝나죠.
한편 몇 년 전에vim adventure라는 게임도 나왔길래 잠시 플레이하기도 했지만 좀 아쉬웠어요. HJKL 조작에 너무 많은 분량을 할당하는 느낌이었는데 제가 스테이지 1을 하다 관뒀기 때문에 이후의 스토리를 몰라서 그런 것일 수도 있습니다.
많은 책과 영상들이 vim을 소개할 때 HJKL 이야기를 빠뜨리지 않는데요, 세상 사람들 대부분이 컴퓨터를 사용해 텍스트 편집을 할 때 방향키를 사용하기 때문일 거에요. 그런데 문제는 vim은 vi를 토대로 만들어진 소프트웨어이고, vi 는 우리가 알고 있는 방향키 모양이 갖춰지기 전에 개발됐습니다.
이야기가 나온 김에 vi를 만든 개발자 Bill Joy 이야기를 해보죠. 맛있어 보이는 음료 병을 놓고 행복하게 웃는 모습이 멋있습니다. 제가 존경하는 인물 중의 하나이기도 합니다.
그런데 이 분은 Java 와 관련이 깊은 분이기도 합니다. Java를 메인 언어로 사용하는 개발자분들이라면 아마 다들 아실 거에요. 왜냐하면 JLS 저자에... 제임스 고슬링 다음으로 나오는 사람이 이 분이기 때문이죠.
빌 조이는 굉장한 프로그래머였고, 그의 이름으로 검색해면 엄청나게 멋진 전설적인 일화들이 나오곤 합니다. 심지어 생각지도 못한 책에서 튀어나오기도 해요. 어느날 말콤 글래드웰의 아웃라이어를 읽다가 갑부 천재로 빌 조이가 나와서 깜짝 놀란 적도 있습니다. 아니 이 사람은 vi 개발자라고!
제가 빌조이 위인전을 읽거나 그의 일화들을 줄줄 꿰는 사람은 아니니 그의 대단한 행적들에 대해서는 굳이 언급하지 않도록 하겠습니다. 여기에서는 vi 에 좀 더 집중하도록 해보죠. vi 의 이름이 왜 vi 일까요? 아주 간단한데요, visual editor 의 앞 두글자를 떼어서 vi 라는 이름을 갖게 됐습니다.
근데 이름이 좀 이상하지 않나요? editor 는 다 비주얼하지 않나? 왜 이름이 비주얼 에디터야? 이런 의문이 들 수 있죠.

그런데 말입니다. 이거 1976년에 만들어진 에디터입니다. 그 이전의 에디터들은 "말 그대로 비주얼하지 않거나", "약간.. 비주얼한" 것들이었습니다.
요즘이야 화면 전체에 텍스트를 다 펼쳐놓고 커서를 위아래로 이동하거나 마우스로 커서를 점프시켜가며 편집하는 게 일반적이지만, 그 무렵엔 파일의 여러 줄을 모니터에 띄워놓고 편집하는 도구가... 없다시피 했습니다. 한 줄을 보면서 편집하는 도구는 있었죠.
vi는 파일 내용을 여러줄로 모니터에 띄워놓고 편집할 수 있는 기능을 제공한 최초의 소프트웨어들 중 하나였습니다. visual editor 라는 이름을 가질만한 자격이 있죠. 그땐 아까도 말했지만 우리에게 익숙한 형태의 방향키가 없었고, 빌조이가 사용했다고 하는 ADM-3A 터미널의 키배치는 이랬습니다.
HJKL 위에 화살표가... 있는 것이 보입니다. 빌 조이는 아마도 이런 키보드에 맞춰서 vi를 개발했을 겁니다. 다른 키에 방향키가 있었다면 어쩌면 HJKL이 아니라 다른 것을 쓰고 있게 됐을지도 모르겠네요.
아무튼 vi가 탄생했을 무렵엔 지금처럼 자유롭게 커서를 여기저기 옮기며 편집하는 분위기가 아니었고, 명령을 통해 텍스트를 업데이트하는 종류의 작업이 주를 이루었습니다. vi/vim의 NORMAL 명령이 그런 작업에서 온 것이죠.
아니 어쩌다 이야기가 여기까지 갔지... 사실 이 이야기는 unix역사에 좀 관심이 있는 분들이라면 많이들 알고 있는 이야기이긴 한데, 원래 하려던 이야기는 이게 아닙니다. 으어 삼천포입니다. 원래 하려고 했던 이야기로 돌아가죠.
vim의 명령은 일일이 외워야 하는 단축키 조합이 아니라, 특수한 문법 구조를 갖고 있습니다. 그래서 그 문법에 맞춰 끼워넣을 수 있는 표현을 하나씩 익힐 때마다 할 수 있는 것이 많아지죠.
그래서 이 구조에 익숙해지면 몇몇 명령을 제외하고는, 생전 써본 적이 없는 기능도, 이렇게 해보면 되지 않을까? 라고 상상해서 써보면 되는 경우가 있습니다. 이럴 때가 참 즐겁죠. 그리고 여기에서 정말 중요한 것은 사용자 명령을 추가할 때에 있습니다.
보통 우리가 IDE에 새로운 단축키 설정이 필요할 때에는 비어있는 키 조합을 찾으려 합니다. 이 기능은 ctrl+shift+d 가 딱좋은데... 라고 생각했다가 그 조합이 있으면 option이나 alt 를 추가한다던가 그러죠. 그런데 이런 조합은 의미를 알기가 어렵습니다.
사용자 정의 명령을 만들 때 vim이 특히 장점을 발휘한다고 생각합니다. modifier 키 조합이 아니라 연속되는 키 입력으로 기능을 할당할 수가 있기 때문이죠. 매 키 입력으로 인해 분기가 생기기 때문에 기능 후보를 좁혀갈 수 있는 것입니다.
그래서 vim에서는 이렇게 앞서는 키의 대표격인 키를 leader 로 설정해 사용할 수 있지만, 사실 하나 뿐만 아니라 여러 키를 기능별 leader로 삼아 사용하는 방법을 많이 씁니다. 예를 들어 저는 F1 을 탐색 leader로 삼습니다. <F1><F1>은 파일 탐색을 할 때 쓰고, <F1><F2>는 버퍼 탐색을 하고..
그런 식이죠. 예를 들어 s는 코딩할 때를 위한 특수 키로 사용하고 있는데, 언어별로 다르게 설정해 씁니다. 요즘 쓰는 언어인 Clojure 설정 일부를 올려 봅니다.
뜻을 설명한 문서의 스크린샷입니다. 글자 하나를 타이핑할 때마다 의미가 좁혀지죠. 만약 이 기능들을 ctrl, command, option, shift 조합을 썼다면.. 파악하기 어려웠을 거 같습니다. 전 그냥 언어별 기능이니까.. s, eval을 하려 하니까 e, word니까 w 하는 게 이해하기 좋더라고요.
아우 벌써 11시가 되어가네요. 오늘은 여기까지 하겠습니다.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with John Grib

John Grib Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @John_Grib

Apr 6
오늘도 어느새
Vㅏ
ㅁ 이 되었군요...
오늘은 Insert 모드 탈출 이야기를 해보죠. vim이 늘 그렇듯 이건 vim을 사용하는 사람마다 꽤 다른 접근법을 갖고 있는 문제이기도 해서, 제가 사용하는 방법이 가장 좋은 방법인지 어떤 건지는 잘 모르겠고 그냥 삽질한 이야기가 될 수도 있습니다.
이야기를 시작하기 전에.. 어제랑 그저께 이야기했던 컨트롤 키 조합에 대해 제가 2017년에 써둔 글이 하나 있더라고요. 이 글은 컨트롤키를 눌렀을 때 0100 의 비트 하나가 0이 되어 0000 이 되는 건 알겠는데 그러면 - 같은 건? 하는 의문에 대한 것입니다.

johngrib.github.io/wiki/tmux-c-da…
Read 33 tweets
Apr 5
벌써
Vㅏ
ㅁ 이 되었군요...
오늘은 렉걸리는 이야기를 해보죠. 그렇습니다. vim에서도 렉걸리는 경우가 있어요. 여러 플러그인 기능을 연달아 사용하는 복잡한 매크로를 1000@@ 해서 만번 돌려버린다던가, 아니면 <c-c>를 적절하지 않은 순간에눌러버렸다던가, 아니면 설정을 잘못했다던가 하는 등의 온갖이유로 화면이 멈춥니다.
물론 그렇다고 완전히 멈춰버리는 경우는 거의 본 적은 없는 것 같고, 대체로 스크롤한 화면이 새로 그려지지 않고 잔상이 남는 형태가 흔합니다. 물론 렉의 정의를 화면이 제때 갱신되지 않는 것 정도로 넓은 의미로 말할 수 있다면 말이죠.
Read 19 tweets
Apr 4
<c-j>,<c-m> 등의 이야기를 해봅시다. 이건 vim의 범위를 좀 벗어나는 이야기이기도 해서 조심스럽기도 한데요, vim의 범위가 어디인지를 이야기해보는 것도 흥미로운 주제이긴 합니다. 일단 <c-j> 이야기를 하려 하긴 한건데 <c-j>가 중요한 건 아니고 하기 전에 음...음 <c-h> 먼저 이야기를 해보죠.
<c-h>표기법이 생소한 사람에겐 알 수 없는 기호로 보이겠지만 알고 보면 별거 아닙니다. control + h 죠. 이걸 vim에서는 <c-h>로 표기합니다. 그런데 사실 이건 vim만이 아니고 아마 터미널에서 입력 문자를 표기할 때 쓰던 옛날 표기법같습니다. 그런데 제가 그렇게 나이 많은 사람은 아니고..
Read 31 tweets
Apr 3
이번엔 예전에 작성해둔 vim 가이드를 공유해보자. 시간이 꽤 지나서 이것저것 추가하고 싶은 것도 있고, 수정하고 싶은 내용도 있지만 일단은.

github.com/johngrib/simpl…
아니 플러그인 작성하는 방법을 글로 써야지 하고 TODO 리스트에 추가한 게 5년 전이라니... 세월이 쏜살같이 흐르네.

github.com/johngrib/simpl…
정말 우물쭈물하다 시간이 훅훅 간다.
Read 4 tweets
Apr 3
vim에서 뭘 검색할 때 / 를 쓰는 게 기본이긴 한데 이렇게 검색한 검색어가 검색을 마친다고 사라지는 게 아니라 / register에 들어간다는 걸 활용하는 기능이 있다. 바로 replace.
perl이나 sed에서와 같이 vim 에서도 s/pattern/replace/ 이런 걸 쓴다. 그런데 pattern 을 생략하면 어떻게 될까?

s/pattern/replace/
s//replace/

즉 위의 두 개 중 후자를 쓰는 방법. 이렇게 검색 pattern을 생략하면 vim은 / register를 사용해 pattern을 채워넣는다.
보통 뭔가 찾아서 replace하려 할 때 사람이 그리 과감하지 않죠. 먼저 검색을 해서 내 의도대로 검색 패턴이나 정규식이 잘 검색되나 확인을 해보고, 아 잘되네 이걸로 replace 해야겠구나 생각을 하는데 여기에서 귀찮은게 바로 replace 하기 위한 명령을 적을 때 검색어를 또 적어야 한다는 거.
Read 16 tweets
Apr 2
다시 밤이 되었군. 이번엔 surround 이야기를 해볼까.
팀 포프의 vim-surround는 vim의 텍스트 오브젝트에 "감싸기" 동사를 추가한다는 점에서 상당한 의의를 갖는 프로젝트라 할 수 있는데, 이게 특정 텍스트 오브젝트를 감싸는 다른 글자 쌍을 다루는 경우가 생각보다 많다는 점에서 기인한다.

github.com/tpope/vim-surr…
예를 들어 코딩을 하다 보면 doSomething(b, c, d) 이런 스타일의 괄호가 들어가는 코드를 작성하는 일이 엄청나게 많음. 문제는 괄호가 중괄호도 있고 소괄호도 있고 대괄호도 있고 <> 이런 부등호 괄호도 있고... 따옴표 쌍따옴표도 있다는 것.
Read 25 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(