Sublime Text가 그리워? 직접 만들어 봤다
Fine, I'll build my own text editor

VS Code의 기반인 Monaco Editor가 `<div>` 수프라며, 직접 텍스트 에디터를 만들기 시작한 개발자의 실험기. `<canvas>` 렌더링의 한계를 깨닫고 `contenteditable`과 `<textarea>`를 비교하며 성능과 접근성, 문법 하이라이팅을 구현해 나간다. 최종적으로는 Tree-sitter와 가상 스크롤 등 더 나은 해법을 제시하며 프로젝트를 마무리한다.
이 데모들은 최적화되지 않았고 접근성도 완벽하지 않지만, 적어도 지는 위치에서 시작하는 건 아니다. `<canvas>`로 렌더링하는 건 악몽이었을 거다.
HN 토론
118- tzs
1980년에서 81년 사이쯤, 저는 학부생으로 캘텍 고에너지 물리학과에서 시스템 프로그래밍/관리 아르바이트를 하고 있었습니다.
롭 파이크는 그 전에 대학원생으로 고에너지 물리학을 하면서 그 자리에 있었지만, 벨 연구소로 떠났습니다.
어느 날, 다른 학생인 칼 호이어와 저는 프로그래머들이 흔히 하는 짓인 '요즘 화면 편집기는 별로다, 우리가 더 잘 만들 수 있을 텐데'라는 불평을 하고 있었습니다.
그게 어쩌다 보니 경쟁이 되었고, 우리 둘 다 밤새 서로를 의식하며 각자 편집기를 만들었습니다. 키보드 소리 외에는 조용했고, 가끔 작동하는 기능을 알려 상대를 흔들려는 듯한 발표 소리만 들렸습니다.
아침에 다른 학생 시스템 프로그래머/관리자인 노먼 윌슨이 들어와 칼과 제가 한 일을 보았습니다.
노먼이 롭 파이크에게 이메일로 이 일을 언급했고, 그의 답변은 대략 이랬습니다:
> 누구나 화면 편집기는 만든다. 쉽고, 스스로 대단해 보이게 만든다. 그들에게 유용한 일이나 하라고 전해.
그로부터 불과 2년쯤 후, 롭 파이크는 화면 편집기를 만들었습니다. 그때 자신이 대단하다고 느꼈을지 궁금하네요. :-)
- akersten
네, 그렇죠. 이런 용도로 특별히 설계되어 30년 동안 브라우저에 내장된 <textarea> 요소가 편집 가능한 텍스트를 구현하는 가장 성능이 좋고 동작이 일관된 방법일 줄 누가 알았겠어요.
저자는 불필요한 복잡성을 거기서 덜어내는 데서 멈춘 게 좀 아쉽네요... 아직 우리는 텍스트 편집기를 만드는 게 아니라 화려한 입력 필드가 있는 웹사이트를 만들고 있는 거죠. 제대로 된 텍스트 편집기를 만들려면 웹 브라우저라는 비대함도 버려야 합니다.
- pmkary
텍스트 편집기는 기계식 시계나 만년필과 같아요. 그 안에 있는 메커니즘에는 그저 아름다움이 있습니다. 제게는 이렇게 만들어지는 걸 보는 것만큼 만족스러운 모듈이 거의 없습니다. 이렇게 좋은 새 편집기를 찾을 때마다, 모든 것이 로프(rope)와 렌더링, I-빔 위치 계산 등으로 이루어진 것을 보면 크리스마스 선물을 받은 기분이에요.
- krzyzanowskim
웹은 오늘날 맞춤형 텍스트 편집기를 만들기에 가장 제약이 많은 플랫폼일 겁니다. 텍스트 레이아웃, 상호작용, 그리고 중요할 수 있는 모든 작은 부분들에서 말이죠. 브라우저 내장 텍스트 기능 밖에서 OS 입력 시스템과 상호작용할 적절한 API가 여전히 부족합니다. 그래서 <canvas> 접근 방식이 그렇게 고통스럽고, 다른 모든 것은 HTML과 브라우저 구현 세부사항에 의해 '제한'되는 거죠.
- dang
최근 관련 글:
이제 Sublime Text 같은 건 안 나와요 - https://news.ycombinator.com/item?id=49209354 - 2026년 8월 (댓글 13개)
- stillpointlab
저는 정말 방금 Fable로 텍스트 편집기를 만들었어요. 솔직히 말하면, KDE의 KTextEditor 라이브러리를 감싸도록 했는데, 그게 텍스트 편집기의 90%를 차지하죠.
저는 Kate를 사용하고 있었는데, LLM이 Fedora에서 Sublime Text에 가장 가까운 것이라고 추천했었죠. 하지만 Kate도 훌륭했지만 너무 많은 기능이 있었어요.
그래서 Fable에게 텍스트 편집기 부분(KTextEditor)을 가져와서 Rust로 LSP 서버와 함께 감싸달라고 했습니다. 약 2일이 걸렸지만, 저는 작고 엄청나게 빠른 편집기를 갖게 되었어요. 탭 같은 것은 Sway로 관리하고, fuzzel은 퍼지 파일 검색을 대신하고, broot은 탐색기 뷰를 대신합니다. 이미 Markdown 미리보기 지원도 추가했어요. 기본적인 git 통합도 언젠가 할 수 있을 것 같아요.
그런 다음 그 작은 편집기를 메모 작성 인터페이스로 바꾸도록 했고, ~/Notes에 메모를 유지하기 위해 Mod-m 키 바인딩에 연결했습니다.
우리는 정말 흥미로운 시대에 살고 있네요. 모두가 가능할 때 활용하시길 바랍니다.
- nottorp
정말 FPS 카운터가 있네요.
실험을 정말로 루프에서 계속 렌더링하고 있는 건가요?
- Jean-Philipe
주제와 무관하지만, 이 웹사이트 디자인이 정말 마음에 듭니다. 신선하고 재미있으면서도 읽기 쉽네요. AI 정책 페이지도 좋아요.