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

johngrib.github.io/wiki/tmux-c-da…
방금 트윗은 어제~그저께 쓴 글에 이어진 트윗이니 여기서 마무리하고, 오늘 본래 주제인 인서트 모드 탈출로 돌아가죠. 보통은 그냥 Esc를 눌러서 탈출하기도 하는데요, 이게 쓰다보면 Esc가 생각보다 꽤 머나먼 위치에 있다는 생각이 들 때가 있습니다. 해봐야 키보드 위에 있는 키인데도 그렇죠.
Esc가 키보드 왼쪽 위에 있기 때문에 저는 보통 왼손 약지로 많이 눌렀습니다. 타이핑하다 왼손 약지로 Esc. 잠시 후 타이핑하다 다시 왼손 약지로 Esc. 그런데 이거 몇 번 해보면 손목이 순간순간 비틀리는 느낌이 듭니다. 하루종일 코딩을 하면 하루종일 이러고 있는 거죠.
그래서 미세하게 마음이 흡족하지 않게 되고, 대안을 열심히 궁리해보게 됩니다. 한동안은 Esc와 같은 문자를 생성하는 <c-[> 를 쓰기도 하고, 부작용이 좀 있긴 하지만 <c-c>를 쓰기도 했죠. 그런데 <c-[>가 생각보다 편하지 않습니다. 누를 때 양 손이 슥 하고 거리가 벌어지잖아요.
영화 레옹에서 개리 올드만이 발(차양)을 양손으로 솨악 젖히면서 방에 들어가는 장면이 나오죠. 약간 그런 느낌이죠. 근데 이걸 단어 하나 쓰고 솨악 단어 하나 쓰고 솨악 하면 피곤합니다. 그래서 저는 <c-[> 도 마음에 들지 않았어요. <c-c>는 부작용이 있으니까 가끔만 썼고요.
이쯤 되면 다른 게 없나 하다가 탭 키를 Esc로 매핑해 보기도 하고.. 그래봐야 거리가 아주 약간 가까워질 뿐이지 손목이 왼쪽으로 돌아가는 문제는 해결되지 않았습니다. 그래서 떠올린 게 imap jj <Esc> 또는 inoremap jj <Esc> 죠. imap과 inoremap 은 중간에 nore 가 들어간다는 차이가 있는데요,
이건 별 건 아니고 no recursive 의미입니다. map으로 키 정의를 바꿀 때 이 정의 안에서는 map으로 정의를 바꾼 다른 키의 사용을 불허한다는 거죠. 아무튼 insert 모드에서 jj 를 Esc로 등록해두면 약간 살맛나는 키보드 생활을 할 수 있었습니다. 이게 Esc보다 살짝 더 편했거든요.
게다가 코딩할 때 jj 는 의외로 거의 나타나지 않는 조합입니다. jj 로 시작하는 단어 자체가 거의 없어요. 한국어에 jjang 이 있긴 하지만 코딩할 때 쓸 일은 (아마) 없죠. 그런데 이걸 쓰다보면 또 불만이 쌓이는데, 오른손 집게손가락이 너무 고생스럽기 때문입니다. 두 번이나 누르니까요.
그래서 그 다음엔 imap jk <Esc> 와 imap kj <Esc> 를 설정해놓고 쓰게 됩니다. 이게 생각보다 꽤 즐거운 조합입니다. kj 와 jk 를 연속으로 눌러서 Esc하는 셈인데, 약간 타닥 하는 느낌이 흥겹고 누르는 재미가 있어요. 물론 jk 나 kj 로 시작하는 단어도 매우 드물죠.
그런데 이것에 익숙해질 무렵 회사에서 일을 하다가... 8년쯤 전인가? 어떤 유지보수 프로젝트를 맡게 되었는데 jk 와 kj 라는 변수명을 쓰는 프로젝트를 만나게 됩니다. 이럴 수가! 정말 이걸 변수로 쓴다고?
그래서 이게 궁극의 해결책이 아니라는 걸 깨닫게 됐습니다. 그래서 그 이후로 많은 고민을 하며 살아가다가 어느날 Esc를... 키보드 가장 왼쪽 가장 아랫줄로 옮기면 어떨까 하는 생각을 하게 됩니다.
그 아이디어가 지금 쓰는 키보드의 핵심 컨셉이 되었죠. 영상을 찍어봤습니다.
Esc를 이 위치로 옮기고 나서 너무 많은 문제가 해결됐습니다. 왼손목의 비틀림 통증(?)도 해결이 됐고, jk / kj 를 너무 입력해서 살살 아파오던 오른손 검지/중지도 안 아프게 됐죠. 이건 거의 열한번째의 손가락을 발견한 것 같은 사건이었습니다.
그래서 이거다. 이거로 평생 가야겠다고 생각하고, 키보드를 소프트웨어적으로 저 위치에 Esc를 설정하는 게 아니라 아예 이런 하드웨어를 가져야겠다는 생각을 하게 됩니다. 그때 제가 재료로 쓴 키보드는 HHKB-JP 였고...

johngrib.github.io/wiki/hhkb-jp-t…
진정한 나만의 키보드를 갖기 위해 HHKB에 내장된 토프레 컨트롤 보드를 뽑아 버리고 TMK가 돌아가는 커스텀 보드를 사서 꽂아넣고, 저 위치에 Esc를 설정한 펌웨어를 빌드해 넣었습니다.

사진은 처음 작업을 하고 찍은 것입니다. Image
계속해서 설정을 업데이트하면서 점점 더 Vim을 쓰기 편하게 개조해 나갔는데요, 그러다보니 문서도 잡다하게 조금씩 써내려갔습니다.

johngrib.github.io/wiki/my-keyboa…
제가 사용한 키보드들에 대한 이야기는 이 글에 잡다하게 적어놨습니다.

johngrib.github.io/wiki/my-keyboa…
지금은 처음에 설정한 것과는 꽤 다릅니다. 일단 왼쪽 아래의 키는 Esc가 아닙니다. F13 이죠. 이 F13은 입력하면 언어입력기를 영문으로 바꿔주고 Esc를 입력하는 기능을 갖고 있습니다. 그 외에도 몇 가지 편의기능을 더 달아놓긴 했는데, 영문전환+Esc가 너무 행복해서 다른 기능들은 곁가지에요.
물론 이 키보드는 쌍둥이 키보드입니다. 정확히 똑같은 키보드를 두 개 만들어서 하나는 회사에서, 하나는 집에서 썼죠. 두 개 만들고 잡다한 실험하고 개조하면서 대충 200만원은 썼던 것 같아요. 일단 HHKB-JP의 가격부터가 한 대에 40만원이나 했으니...
그런데 이 이야기의 핵심은 Esc 누르는 게 힘들어서 키보드를 고쳤다가 아닙니다. 왼쪽 위의 Esc를 누르는 것만이 정답이 아니라는 것이 핵심이죠. 저는 개조한 키보드를 갖고 있긴 하지만 가끔 한글 때문에 실수할 때가 있는데요, 한글모드일 때 esc를 안 누르면 vim에서 입력이 제대로 안되죠.
그래서 개조한 키보드가 있다 하더라도 이에 대한 대책은 있어야 합니다. 그리고 그 대책은 의외로 vim 안에 있는데요, langmap 이라는 것이 있습니다. 이걸 설정하면 알파벳을 입력하지 않아도 매핑한 문자를 입력했을 때 알파벳처럼 작동합니다. Image
langmap을 설정하면 이렇게 쓸 수 있습니다. 아예 대놓고 쓰기는 좀 그렇고, 가끔 한글 모드를 영문으로 바꾸는 걸 깜빡했을 때 failover 용으로는 괜찮아요. 한 글자가 나오는 건 vim의 문제라기보다는 입력기 문제이니 보기에만 좀 아쉽고 그럭저럭 만족스러운 움직임을 보입니다.
혹시 자신의 설정에 복붙하고 싶으신 분들은 이걸 참고하시면 되겠습니다.
github.com/johngrib/dotfi…
그런데 말입니다. vim에 익숙해지면 의외로 세상 곳곳에 vim 사용자들을 위한 장치가 숨어있다는 것을 알게 됩니다. gmail 단축키 jk 로 움직이고요, youtube 에서 hjkl 로 재생 막대 움직일 수 있고, 페이스북도.. 트위터도... 그렇습니다. 트위터 단축키도 jk 로 위아래로 움직이고.. Image
궁금하신 분들은 트위터 데스크탑 웹사이트에서 키보드로 ? 를 눌러보세요. 그러면 vim 스타일 키맵 도움말이 나올 겁니다.
이쯤 되면 약간 프리메이vim.. vim루미나티가 아닌가 하는 생각도 들 수 있는데 vim 사용자로서는 기쁜 일이기만 합니다. 아무튼 이렇게 온갖 곳에서 사용할 수 있는데 한국어 키보드 사용자는 키를 입력하기 전에 영문으로 바꿔야 한다는 괴로움이 있죠.
물론 이걸 해결하기 위한 소프트웨어도 있습니다. Mac 사용자라면 구름 입력기를 사용하면.. 한글을 입력해도 웹 브라우저 등에서 영문으로 인식해서 이런 단축키들을 그대로 사용할 수 있습니다. vimium 플러그인 같은 것에서도 쓸 수 있어서 편리하죠.

gureum.io
vimium 이야기가 나온 김에 요거 이야기만 하고 마치겠습니다. vim 스타일의 키 입력을 웹 브라우저에서도 사용할 수 있게 해주는 플러그인들이 있습니다. chome에서는 vimium이 유명하고, 파이어폭스에서만 쓸 수 있는 tridactyl 같은 훌륭한 프로그램도 있어요. 마우스로 손을 잘 안 보내게 되죠.
Mac이라면 OS ui 클릭을 대신해주는 vimac 이란 것도 있고... 아무튼 vim에 익숙해지면 어디에나 vim way가 있습니다. 어지간한 현대적인 IDE들은 대부분 vim 플러그인이 마켓플레이스에 있기도 하고요. 그래서 새로운 IDE를 접하게 되어도 별로 겁먹지 않습니다. vim은 텍스트 에디팅 랭귀지니까요.
오늘 vim 이야기는 여기까지 하죠.
아참 참고로 gmail 단축키 엄청 편리하니 안 써보신 분들은 써보세요. gmail 단축키는 디폴트 off 니까 설정에 들어가서 켜야 합니다.

• • •

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 7
벌써
Vㅏ
ㅁ 이군요...
오늘 오전에 언급한 cheat sheet 이야기를 해보겠습니다. 저는 치트시트를 꽤 좋아하는 편인데요, 예를 들어 제 홈페이지는 거대한 치트시트 컨셉으로 운영하고 있는 공간이기도 합니다. 그런데 vim 치트시트는 별로 좋아하지 않습니다.

이때 중요한 건 제가 좋아하지 않는다는 거지, 다른 사람들도 좋아하면 안된다는 게 아닙니다! 누군가는 이 치트시트를 매우 공들여서 만들었을 거고, 도움을 받은 사람들도 많을 겁니다. 제가 좋아하지 않는 건 개인적인 취향 때문이고, 누군가가 엄청 좋아한다 해도 저는 이해할 수 있습니다.
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!

:(