vi가 없었다면 모달 편집은 발명되지 않았을 것이다. 모달 편집의 기원과 확산, 한계를 되짚으며 왜 이것이 역사적 우연의 산물인지, 그리고 vim이 어떻게 그 중심이 되었는지 논한다.
2025년 10월 21일
얼마 전 내 친구 Pablo Meier가 2024년 비디오 게임을 리뷰하며 이렇게 썼다:
어떤 예술가는, 그 사람이 존재하지 않았더라도 비슷한 누군가가 그 공백을 채웠을 것 같다(예: 케이티 페리가 없었더라도 그녀 같은 사람이 있었을 것). 하지만 어떤 이들은 성공적인 모방자도 비교 대상도 없다(재키 찬, 위어드 알을 떠올려 보라): 그들은 대체 불가능하다.
그는 이를 작가주의에 대해 설명하는 데 썼지만, 나는 이것을 ‘기회’의 속성으로 본다. ‘대체 가능한’ 아티스트는 더 큰 시장에서 활동한다. 케이티 페리의 시장은 크고, 눈에 잘 띄며, 분명히(하지만 ‘쉽게’는 아님) 공략할 수 있다. 그래서 그 틈새에서 경쟁하려는 사람이 많다. 반면 위어드 알의 시장은 불분명하다. 과거에도 패러디 송이 성공한 적은 있었지만, 그만한 기회가 슈퍼스타를 먹여 살릴 만큼 충분한지 분명하지 않았다.
나는 모달 편집이 후자의 범주라고 생각한다. 지금은 Vim이 매우 인기 있고 수많은 후속작을 낳았다. 하지만 그 핵심 특징인 모드는 그리 ‘자명하게’ 유익하지 않다. 그래서 빌 조이가 50년 전 vi(vim의 직접적 전신)를 만들지 않았다면 오늘날 모달 에디터는 존재하지 않았을 거라고 본다.
비모달 에디터에서는 예상대로 "u" 키를 누르면 텍스트에 "u"가 입력된다. 반면 모달 에디터에서는 어떤 "모드"에 있느냐에 따라 "u"의 동작이 달라진다. Vim의 기본인 "일반(normal)" 모드에서는 "u"가 마지막 변경을 되돌리고, "비주얼(visual)" 모드에서는 선택된 모든 텍스트를 소문자로 바꾼다. 문자를 실제로 입력하는 것은 "삽입(insert)" 모드에서만 일어난다. 다른 키들도 마찬가지고, 조합 단축키(ctrl-x)도 같다.
가장 분명한 이점은 키보드에 고급 명령을 매우 촘촘히 배치할 수 있다는 점이다. 표준 미국식 키보드는 문자 입력에 할당된 키가 대략 48개쯤 된다. ctrl과 shift 조합을 곁들이면 다른 각 모드마다 최소 ~150개 이상의 추가 단축키가 생긴다. 내 생각에 이것이 모달 편집을 상황별 단축키와 ‘정신적으로’ 구분 짓는 지점이다. 비모달 에디터가 언어별이나 포커스된 패널에 따라 단축키 동작을 바꾸게 해 준다 해도, 사용자가 전역적으로 제어하는 모드가 없다면 그만한 단축키 밀도를 달성할 수 없다.
오늘날 모달 편집이 광범위하게 사랑받고 있기는 하지만(VSCode의 Vim 플러그인은 최소 800만 다운로드), 나는 이것이 vi의 인기 때문에 ‘끌고 가졌던’ 것이지, vi의 인기를 ‘이끌었던’ 것은 아니라고 생각한다.
vi 이전의 에디터는 모달이 아니었다. EDT/KED처럼 조합 단축키를 쓴 것도 있었고, ed나 TECO처럼 사실상 텍스트 편집 DSL용 REPL에 가까운 것도 있었다. 이 두 가지 발상은 현대 에디터에도 널리 재등장한다.
내가 파악한 바로는 최초의 모달 에디터는 1974년 버틀러 램슨의 Bravo였다. 빌 조이는 그에게서 영감을 받았다고 인정한다:
화면 편집 모드의 많은 아이디어를 내가 비밀스럽게 훔쳐보고 베낀 Bravo 매뉴얼에서 가져왔다. 점(dot)은 사실 Bravo의 더블-이스케이프, redo 명령이다. 대부분을 베꼈다.
빌 조이가 그 아이디어를 차용한 이유는, 키 입력 반영이 느린 단순 터미널(일명 ‘덤 터미널’)에서 작업하고 있었기 때문일 것이다. 복잡한 작업에 필요한 키 수를 최소화해야 한다는 압박이 있었다.
그렇다면 Bravo는 왜 모달 편집을 채택했을까? Alto 핸드북을 보면, 제록스가 마우스와 GUI 워크플로의 최적점을 모색하고 있었다는 인상을 받는다. Bravo는 한 손은 마우스, 다른 한 손은 키보드 명령에 두는 ‘모드’ 실험이었다. 다른 실험으로는 상황별 메뉴(Markup 프로그램)와 툴바(Draw)가 있었다.
제록스는 아주 빠르게 모드를 ‘하지 않겠다’고 결정했다. 후속작인 Gypsy와 BravoX는 모드리스였다. 처음에는 영문자에 배정된 명령을 그래픽 메뉴, 특수 키, 조합으로 옮겼다.
내게는, 모드는 특정 제약을 다루려는 실패한 실험으로 시작했다가, 나중에 다른 제약을 다루려는 성공적 채택으로 이어진 것처럼 보인다. 즉, 모드는 ‘일반적으로 유용한’ 조합 단축키 같은 기능이 아니라 ‘특수한’ 기능이었다.
vi는 빌 조이의 동료들 사이에서 인기가 있었지만, 그는 성공을 특정 기능 덕분이라 보지 않는다:
vi가 훌륭한 점은, 우리가 공짜로 줬기 때문에 좋은 점유율을 가졌다는 것이다. 이제 모두가 갖고 있다. 그래서 기본 UNIX의 일부로 여겨질 기회가 생겼다. EMACS도 멋진 에디터지만 수백 달러나 하니, 결코 사지 않을 사람들이 항상 있을 것이다.
vi는 인기 있던 BSD Unix에 무료로 배포됐고, POSIX Issue 2에서 표준화되어 모든 유닉스 OS가 vi를 갖추어야 했다. 이게 곧 vi를 대중화했고, 그래서 그렇게 많은 사람들이 모달 에디터를 배우게 된 이유라고 볼 수 있다.
90년대쯤에는, 모달 편집이 좋은 아이디어라고(비록 자명하진 않지만) 여겨지기 시작했다고 본다. 그래서 vi의 직계 후손들, 가장 유명하게는 vim이 나왔다. 또한 Emacs나 VSCode 같은 확장 가능한 에디터들이 vim-모드 확장을 품게 되었는데, 이런 것들은 언제나 비모달 기반 위에 얹힌 단순한 에뮬레이션 레이어일 뿐이다. 이는 사람들이 vim 키 바인딩에 익숙해지는 데에는 도움이 되었지만(나도 Kile로 배웠다), 사람들로 하여금 모달 편집으로 ‘무언가를 실제로 해보게’ 하지는 못했다. 늘 “Vim의 특이점” 정도로 남았다.
모드는 다른 곳에서도 그리 뜨지 않았다. 모달 워드 프로세서도, 스프레드시트 편집기도, 이메일 클라이언트도 없다.1 Visidata는 엄청 멋진 모달 데이터 탐색 도구지만 꽤 마이너하다. 파이어폭스에는 한때 vimperator(Vim에서 영감을 받음)가 있었지만 지금은 폐기됐다. 모달 소프트웨어라 하면 모달 편집이고, 그 말은 곧 vi다.
그래도 요즘은 조금씩 달라지고 있다! 이제는 kakoune와 Helix 같은 새로운 모달 텍스트 에디터가 보인다. 이들은 단지 vi를 에뮬레이션하려 하기보다 완전히 새로운 일을 한다. 다만 이들 또한 vi의 편집 모델이 가진 한계로 인식된 부분들에 대응하기 위해 만들어졌다. 여전히 ‘후손’으로 분류할 수 있다고 본다. 만약 vi가 존재하지 않았다면, kak와 helix 개발자들은 그래도 모달 에디터를 만들었을까, 아니면 다른 아이디어를 탐색했을까?
전체 이야기와 아주 밀접하진 않지만, 내 불만 한 가지. vi와 vim은 하드코딩된 모드 집합을 갖고 있고, 완전히 새로운 모드를 추가하는 것은 불가능하다. 예를 들어 플러그인(예: vim 기본 netrw)이 파일 탐색기를 추가하면 파일시스템 모드를 추가할 수 있어야 하지 않나? 하지만 그럴 수 없기 때문에, 대신 파일시스템을 열 때까지 기다렸다가 일반 모드에 매핑을 60개나 더한다. ‘파일시스템’ 모드, ‘diff’ 모드, ‘git’ 모드 등을 제대로 추가할 방법이 없으니, 플러그인 개발자들은 그것들을 흉내 내야 한다.
그런데 사람들은 이걸 문제로 보지 않는 것 같다! vim의 유산이 남긴 짐을 덜어내려는 Neovim도 ‘모드를 만들 수 있게 하는 것’을 중요한 기능으로 보지 않았다. 모달 편집을 바닥부터 다시 고안한 Kak과 Helix도 새로운 모드 생성은 지원하지 않는다.2 사람들은 새로운 모드를 갈망하지 않는다!
지금까지 나는 파블로의 말처럼 vi가 ‘대체 불가능하다’는 점을 보여주려 했다. Bravo 이전에는 에디터들이 모달 편집을 하지 않았고, vi가 엄청나게 인기를 얻은 이후에도 관계없는 다른 에디터들은 모달 편집을 채택하지 않았다. 많아봐야 vi 에뮬레이션 레이어를 얹었을 뿐이다. kak과 helix가 이 이야기를 복잡하게 만들긴 하지만, 나는 그들이 이를 반박한다고 보지 않는다. 등장 시점도 훨씬 늦고, 엄밀히 말해 후손(연관)이라 할 수 있기 때문이다.
내가 보기엔, 진공 상태에서 모달 편집은 나쁜 아이디어처럼 들린다. 모드는 사용자가 항상 알고 있어야 하는 전역 상태이므로 위험하다. 새로운 모드를 잘 쓰려면 모든 키 바인딩을 외워야 하므로 어렵다. 모달 편집이 비모달 조합형 에디터(예: VSCode)보다 효율적이 되기 전까지는 가혹한 진입 장벽이 있다.
그래서 이것은 원래 매우 특정한 상황에서 나타났다. 초기 마우스 UX 실험과 모뎀 레이턴시를 다루는 방식으로 말이다. 오늘날 우리가 vim을 가진 것은 역사적 우연의 산물이다.
그리고 난 그게 고맙다! 네오빔은 내 차가운 시체의 손에서나 떼어낼 수 있을 거다, 이 괴물들아.
내 발표 "TLA+로 저지연 시스템 설계하기"가 중앙시간 기준 10/23 오전 11:40에 진행된다. 티켓은 무료, 컨퍼런스는 온라인, 발표는 16분뿐이니 꼭 보러 오라!
굳이 눈을 찡그려 보면 지메일도 어느 정도 해당한다고 할 수 있겠지만, 거의 안티-기능에 가깝다↩
Helix가 마이너 모드 생성을 지원하긴 하는데, 이는 한 번의 키 입력에만 활성화되므로, 사실상 vim의 다중 키 매핑을 더 좋고 인체공학적으로 개선한 것에 가깝다.↩
웹에서 이 글을 읽고 있다면 여기에서 구독할 수 있다. 업데이트는 주 1회. 내 메인 웹사이트는 여기다.
내 새 책 Logic for Programmers 이 얼리 액세스 중이다! 여기에서 받아보라.