이 글은 2022년 4월 6일 트위터에 쓴 글을 백업한 것입니다.

insert 모드 탈출 이야기

오늘도 어느새
Vㅏ
ㅁ 이 되었군요…

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

[[/cmd/tmux/c-dash]]

방금 트윗은 어제~그저께 쓴 글에 이어진 트윗이니 여기서 마무리하고, 오늘 본래 주제인 인서트 모드 탈출로 돌아가죠. 보통은 그냥 Esc를 눌러서 탈출하기도 하는데요, 이게 쓰다보면 Esc가 생각보다 꽤 머나먼 위치에 있다는 생각이 들 때가 있습니다. 해봐야 키보드 위에 있는 키인데도 그렇죠.

Esc가 키보드 왼쪽 위에 있기 때문에 저는 보통 왼손 약지로 많이 눌렀습니다. 타이핑하다 왼손 약지로 Esc. 잠시 후 타이핑하다 다시 왼손 약지로 Esc. 그런데 이거 몇 번 해보면 손목이 순간순간 비틀리는 느낌이 듭니다. 하루종일 코딩을 하면 하루종일 이러고 있는 거죠.

그래서 미세하게 마음이 흡족하지 않게 되고, 대안을 열심히 궁리해보게 됩니다. 한동안은 Esc와 같은 문자를 생성하는 <c-[> 를 쓰기도 하고, 부작용이 좀 있긴 하지만 <c-c>를 쓰기도 했죠. 그런데 <c-[>가 생각보다 편하지 않습니다. 누를 때 양 손이 슥 하고 거리가 벌어지잖아요.

영화 레옹에서 개리 올드만이 발(차양)을 양손으로 솨악 젖히면서 방에 들어가는 장면이 나오죠. 약간 그런 느낌이죠. 근데 이걸 단어 하나 쓰고 솨악 단어 하나 쓰고 솨악 하면 피곤합니다. 그래서 저는 <c-[> 도 마음에 들지 않았어요. <c-c>는 부작용이 있으니까 가끔만 썼고요.

이쯤 되면 다른 게 없나 하다가 탭 키를 Esc로 매핑해 보기도 하고.. 그래봐야 거리가 아주 약간 가까워질 뿐이지 손목이 왼쪽으로 돌아가는 문제는 해결되지 않았습니다. 그래서 떠올린 게 imap jj <Esc> 또는 inoremap jj <Esc> 죠. imapinoremap은 중간에 nore가 들어간다는 차이가 있는데요, 이건 별 건 아니고 no recursive 의미입니다. map으로 키 정의를 바꿀 때 이 정의 안에서는 map으로 정의를 바꾼 다른 키의 사용을 불허한다는 거죠. 아무튼 insert 모드에서 jj 를 Esc로 등록해두면 약간 살맛나는 키보드 생활을 할 수 있었습니다. 이게 Esc보다 살짝 더 편했거든요.

게다가 코딩할 때 jj는 의외로 거의 나타나지 않는 조합입니다. jj로 시작하는 단어 자체가 거의 없어요. 한국어에 jjang이 있긴 하지만 코딩할 때 쓸 일은 (아마) 없죠. 그런데 이걸 쓰다보면 또 불만이 쌓이는데, 오른손 집게손가락이 너무 고생스럽기 때문입니다. 두 번이나 누르니까요.

그래서 그 다음엔 imap jk <Esc>imap kj <Esc>를 설정해놓고 쓰게 됩니다. 이게 생각보다 꽤 즐거운 조합입니다. kjjk를 연속으로 눌러서 Esc하는 셈인데, 약간 타닥 하는 느낌이 흥겹고 누르는 재미가 있어요. 물론 jkkj로 시작하는 단어도 매우 드물죠.

키보드 왼쪽 아래에 Esc를 둔다

그런데 이것에 익숙해질 무렵 회사에서 일을 하다가… 8년쯤 전인가? 어떤 유지보수 프로젝트를 맡게 되었는데 jkkj라는 변수명을 쓰는 프로젝트를 만나게 됩니다. 이럴 수가! 정말 이걸 변수로 쓴다고? 그래서 이게 궁극의 해결책이 아니라는 걸 깨닫게 됐습니다. 그래서 그 이후로 많은 고민을 하며 살아가다가 어느날 Esc를… 키보드 가장 왼쪽 가장 아랫줄로 옮기면 어떨까 하는 생각을 하게 됩니다. 그 아이디어가 지금 쓰는 키보드의 핵심 컨셉이 되었죠. 영상을 찍어봤습니다.

Esc를 이 위치로 옮기고 나서 너무 많은 문제가 해결됐습니다. 왼손목의 비틀림 통증(?)도 해결이 됐고, jk / kj를 너무 입력해서 살살 아파오던 오른손 검지/중지도 안 아프게 됐죠. 이건 거의 열한번째의 손가락을 발견한 것 같은 사건이었습니다. 그래서 이거다. 이거로 평생 가야겠다고 생각하고, 키보드를 소프트웨어적으로 저 위치에 Esc를 설정하는 게 아니라 아예 이런 하드웨어를 가져야겠다는 생각을 하게 됩니다. 그때 제가 재료로 쓴 키보드는 HHKB-JP 였고…

[[/hhkb-jp-tmk]]

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

사진은 처음 작업을 하고 찍은 것입니다.

키보드

계속해서 설정을 업데이트하면서 점점 더 Vim을 쓰기 편하게 개조해 나갔는데요, 그러다보니 문서도 잡다하게 조금씩 써내려갔습니다.

[[/tool/keyboard/my-keyboard-use]]

제가 사용한 키보드들에 대한 이야기는 이 글에 잡다하게 적어놨습니다.

[[/tool/keyboard/my-keyboard-history]]

지금은 처음에 설정한 것과는 꽤 다릅니다. 일단 왼쪽 아래의 키는 Esc가 아닙니다. F13 이죠. 이 F13은 입력하면 언어입력기를 영문으로 바꿔주고 Esc를 입력하는 기능을 갖고 있습니다. 그 외에도 몇 가지 편의기능을 더 달아놓긴 했는데, 영문전환+Esc가 너무 행복해서 다른 기능들은 곁가지에요.

물론 이 키보드는 쌍둥이 키보드입니다. 정확히 똑같은 키보드를 두 개 만들어서 하나는 회사에서, 하나는 집에서 썼죠. 두 개 만들고 잡다한 실험하고 개조하면서 대충 200만원은 썼던 것 같아요. 일단 HHKB-JP의 가격부터가 한 대에 40만원이나 했으니…

그런데 이 이야기의 핵심은 Esc 누르는 게 힘들어서 키보드를 고쳤다가 아닙니다. 왼쪽 위의 Esc를 누르는 것만이 정답이 아니라는 것이 핵심이죠. 저는 개조한 키보드를 갖고 있긴 하지만 가끔 한글 때문에 실수할 때가 있는데요, 한글모드일 때 esc를 안 누르면 vim에서 입력이 제대로 안되죠.

langmap 사용하기

그래서 개조한 키보드가 있다 하더라도 이에 대한 대책은 있어야 합니다. 그리고 그 대책은 의외로 vim 안에 있는데요, langmap이라는 것이 있습니다. 이걸 설정하면 알파벳을 입력하지 않아도 매핑한 문자를 입력했을 때 알파벳처럼 작동합니다.

langmap

langmap을 설정하면 이렇게 쓸 수 있습니다. 아예 대놓고 쓰기는 좀 그렇고, 가끔 한글 모드를 영문으로 바꾸는 걸 깜빡했을 때 failover 용으로는 괜찮아요. 한 글자가 나오는 건 vim의 문제라기보다는 입력기 문제이니 보기에만 좀 아쉽고 그럭저럭 만족스러운 움직임을 보입니다.

혹시 자신의 설정에 복붙하고 싶으신 분들은 이걸 참고하시면 되겠습니다.

johngrib/dotfiles

어디에나 vim 사용자들이 있다

그런데 말입니다. vim에 익숙해지면 의외로 세상 곳곳에 vim 사용자들을 위한 장치가 숨어있다는 것을 알게 됩니다. gmail 단축키 jk로 움직이고요, youtube 에서 hjkl로 재생 막대 움직일 수 있고, 페이스북도.. 트위터도… 그렇습니다. 트위터 단축키도 jk로 위아래로 움직이고..

트위터 단축키

궁금하신 분들은 트위터 데스크탑 웹사이트에서 키보드로 ?를 눌러보세요. 그러면 vim 스타일 키맵 도움말이 나올 겁니다.

이쯤 되면 약간 프리메이vim.. vim루미나티가 아닌가 하는 생각도 들 수 있는데 vim 사용자로서는 기쁜 일이기만 합니다. 아무튼 이렇게 온갖 곳에서 사용할 수 있는데 한국어 키보드 사용자는 키를 입력하기 전에 영문으로 바꿔야 한다는 괴로움이 있죠.

물론 이걸 해결하기 위한 소프트웨어도 있습니다. Mac 사용자라면 구름 입력기를 사용하면.. 한글을 입력해도 웹 브라우저 등에서 영문으로 인식해서 이런 단축키들을 그대로 사용할 수 있습니다. vimium 플러그인 같은 것에서도 쓸 수 있어서 편리하죠.

https://gureum.io/

vimium 이야기가 나온 김에 요거 이야기만 하고 마치겠습니다. vim 스타일의 키 입력을 웹 브라우저에서도 사용할 수 있게 해주는 플러그인들이 있습니다. chome에서는 vimium이 유명하고, 파이어폭스에서만 쓸 수 있는 tridactyl 같은 훌륭한 프로그램도 있어요. 마우스로 손을 잘 안 보내게 되죠.

Mac이라면 OS ui 클릭을 대신해주는 vimac 이란 것도 있고… 아무튼 vim에 익숙해지면 어디에나 vim way가 있습니다. 어지간한 현대적인 IDE들은 대부분 vim 플러그인이 마켓플레이스에 있기도 하고요. 그래서 새로운 IDE를 접하게 되어도 별로 겁먹지 않습니다. vim은 텍스트 에디팅 랭귀지니까요.

오늘 vim 이야기는 여기까지 하죠. 아참 참고로 gmail 단축키 엄청 편리하니 안 써보신 분들은 써보세요. gmail 단축키는 디폴트 off 니까 설정에 들어가서 켜야 합니다.

https://threadreaderapp.com/thread/1511669784135446528.html