Helix: 설정 없이 바로 쓰는 터미널 코드 에디터

NeoVim을 제대로 써 보겠다고 마음먹은 날을 떠올려 보면, 코드를 짠 시간보다 init.lua를 고친 시간이 더 길었던 것 같은데요. 플러그인 매니저를 고르고, 언어 서버(language server)를 붙이고, 구문 강조(syntax highlighting) 플러그인을 설치하다 보면 하루가 금방 갑니다. 그래서 LazyVim 같은 배포판이 인기를 끌기도 했고요.

그런데 처음부터 그 모든 걸 품고 나오는 에디터가 있다면 어떨까요? 오늘 소개할 Helix가 바로 그런 에디터입니다. 설치하고 파일을 열면 구문 강조, 자동 완성, 정의로 이동, 퍼지 파인더(fuzzy finder)가 이미 다 돌아갑니다. 설정 파일은 한 줄도 쓰지 않은 상태로요. 🤔

이번 글에서는 Helix를 설치하고, Vim과 정반대인 편집 문법을 익히고, 다중 선택(multiple selections)과 Tree-sitter로 코드를 다루는 방법을 차례로 살펴보겠습니다.

Helix는 어떤 에디터인가요?

Helix는 스스로를 “포스트모던 텍스트 에디터(A post-modern text editor)“라고 소개합니다. 2020년에 Blaž Hrastnik이 시작한 오픈 소스 프로젝트이고, 전부 Rust로 작성되어 있습니다. Electron도, VimScript도, JavaScript도 쓰지 않는 순수 터미널 앱이라 SSH로 접속한 원격 서버나 tmux 안에서도 그대로 동작합니다.

Vim처럼 모드를 오가며 편집하는 모달 편집(modal editing) 방식을 쓰지만, 뿌리는 Vim보다 Kakoune이라는 에디터에 더 가깝습니다. Kakoune에서 “먼저 선택하고, 그다음 동작한다”는 편집 모델과 다중 선택을 가져왔거든요.

다만 철학에서 Kakoune과 갈라지는 지점이 있습니다. Kakoune은 창 분할이나 언어 서버 연동을 외부 도구에 맡기는 조합성(composability)을 중시하는 반면, Helix는 그런 기능을 에디터 안에 직접 넣는 쪽을 택했습니다. 덕분에 별도 설정 없이도 꽤 많은 기능을 바로 쓸 수 있습니다. 우선 Tree-sitter가 내장되어 구문 강조와 들여쓰기는 물론이고 함수나 클래스 단위로 코드를 선택하고 이동하는 데까지 쓰입니다. 또한 LSP 클라이언트가 들어 있어서 언어 서버만 설치하면 자동 완성, 정의로 이동, 진단 메시지가 동작합니다. 그리고 파일, 버퍼, 심볼, 프로젝트 전체를 검색하는 퍼지 파인더도 기본 기능이고요. 마지막으로 괄호 자동 닫기나 감싸기(surround) 같은 편의 기능과 내장 테마 100여 종까지 갖추고 있습니다.

반대로 아직 없는 것도 분명합니다. 바로 플러그인 시스템인데요, 이 부분은 글 후반에서 다시 이야기하겠습니다.

Helix 설치

macOS에서는 Homebrew로 설치합니다.

brew install helix

설치된 명령어 이름은 helix가 아니라 hx입니다. 버전을 확인해 보겠습니다.

hx --version
결과
helix 25.07.1 (a05c151b)

Helix는 연도와 월을 조합한 버전 번호를 씁니다. 25.07은 2025년 7월 릴리스라는 뜻이에요. Windows에서는 winget이나 scoop으로, Linux에서는 배포판 패키지 매니저로 설치하면 되니 자세한 방법은 공식 설치 문서를 참고하세요. 참고로 Arch Linux 패키지는 명령어 이름이 hx가 아니라 helix입니다.

설치를 마쳤다면 내장 튜토리얼부터 열어 보시길 권합니다.

hx --tutor

Vim의 vimtutor처럼 직접 키를 눌러 가며 기본 조작을 익히는 문서가 열립니다. 30분 정도면 끝까지 따라갑니다.

선택 먼저, 동작은 나중에

Helix를 처음 쓰는 Vim 사용자가 가장 먼저 부딪히는 벽은 문법의 순서입니다. Vim은 “동사 + 목적어” 순서로 명령합니다. dw는 “삭제해라(d), 단어를(w)“라는 뜻이죠.

Helix는 이 순서를 뒤집어서 “목적어 + 동사”로 명령합니다. w를 누르면 다음 단어가 먼저 선택되고, 그 상태에서 d를 눌러야 삭제됩니다.

처음에는 어색하지만 이 순서에는 분명한 장점이 있습니다. Vim에서 d3w를 입력하면 정확히 어디까지 지워질지 실행해 보기 전에는 알 수 없는데요. Helix에서는 3w를 누르는 순간 세 단어가 하이라이트되니, 눈으로 범위를 확인하고 나서 d를 누를지 결정하면 됩니다. 틀렸다면 ;로 선택을 접고 다시 고르면 그만이고요.

자주 쓰는 명령을 Vim과 나란히 놓아 보겠습니다.

하고 싶은 일VimHelix
단어 삭제dwwd
줄 삭제ddxd
줄 복사yyxy
단어 안쪽 바꾸기ciwmiwc
괄호 짝으로 이동%mm
파일 끝으로 이동Gge
파일 전체에서 치환:%s/a/b/g% s a Enter c b
다시 실행(redo)Ctrl-rU

x가 Vim과 완전히 다른 의미라는 점에 주의하세요. Helix에서 x는 글자 삭제가 아니라 현재 줄 선택이고, 누를 때마다 아래 줄로 선택이 늘어납니다. %도 괄호 짝 이동이 아니라 파일 전체 선택입니다.

반대로 그대로인 것도 많습니다. h, j, k, l로 움직이고, i, a, o로 삽입 모드에 들어가고, Esc로 빠져나옵니다. :w로 저장하고 :q로 종료하는 것도 같습니다. 그래서 Vim 사용자라면 첫날부터 기본 편집은 할 수 있고, 손에 밴 몇몇 조합만 새로 익히면 됩니다.

다중 선택으로 여러 곳을 한꺼번에 고치기

Helix에서 다중 선택은 부가 기능이 아니라 편집의 기본 단위입니다. 가장 자주 쓰는 패턴은 넓게 선택한 다음 그 안에서 정규식으로 좁히는 방식인데요.

예제로 단어 개수를 세는 Rust 코드를 열어 보겠습니다. word라는 이름을 모두 token으로 바꾸고 싶다고 해 볼게요. 먼저 %로 파일 전체를 선택하고, s를 누른 뒤 word를 입력하고 Enter를 누릅니다.

정규식 word로 여섯 곳을 동시에 선택한 Helix 화면

s는 현재 선택 영역(selection) 안에서 정규식에 맞는 부분만 골라 새 선택 영역으로 만드는 명령입니다. 오른쪽 아래 상태 표시줄의 1/6 sels는 선택 영역이 6개이고 그중 첫 번째가 주 선택 영역(primary selection)이라는 뜻입니다. 이 상태에서 c를 누르고 token을 입력하면 여섯 곳이 동시에 바뀝니다.

여섯 개의 선택 영역을 한꺼번에 token으로 바꾼 결과

Vim의 :%s/word/token/g와 결과는 같지만, 바뀔 위치를 미리 눈으로 확인한다는 점이 다릅니다. count_words의 word까지 바뀌는 게 싫었다면 s 단계에서 이미 알아챘을 테니까요. 그럴 때는 )로 주 선택 영역을 옮겨 가며 Alt-,로 하나씩 빼거나, 정규식을 \bword\b로 바꿔 다시 고르면 됩니다.

선택을 정리하는 키도 몇 가지 알아 두면 편합니다. ,는 주 선택 영역 하나만 남기고 나머지를 지우고, ;는 각 선택 영역을 커서 한 칸으로 접습니다. 그리고 C는 현재 선택을 바로 아래 줄에 복제해서 세로로 커서를 늘려 줍니다. VS Code의 멀티 커서를 즐겨 쓰셨다면 금방 손에 익을 거예요.

Tree-sitter로 코드 구조 단위로 선택하기

Helix는 Tree-sitter로 코드를 구문 트리(syntax tree)로 파싱해 둡니다. 구문 강조에만 쓰는 게 아니라 선택과 이동에도 그 구조를 활용하는데요.

m 키로 들어가는 매치 모드(match mode)에서 mi는 텍스트 객체(text object)의 안쪽을, ma는 바깥쪽까지 선택합니다. 여기에 붙이는 글자가 대상을 정합니다. w는 단어, (는 괄호, f는 함수, t는 타입이나 클래스, a는 인자, c는 주석입니다.

함수 본문 아무 곳에 커서를 두고 maf를 눌러 보겠습니다.

maf로 count_words 함수 전체를 선택한 Helix 화면

시그니처부터 닫는 중괄호까지 함수 전체가 정확히 선택되었습니다. 줄 수를 셀 필요도, 중괄호 짝을 찾을 필요도 없습니다. 이 상태에서 d를 누르면 함수가 통째로 지워지고, y를 누르면 복사됩니다.

구조를 따라 선택 범위를 넓히고 좁히는 키도 있습니다. Alt-o는 구문 트리의 부모 노드로 선택을 넓히고, Alt-i는 다시 좁힙니다. 변수 이름에서 시작해 Alt-o를 반복하면 표현식, 문장, 블록, 함수 순서로 선택이 커지는 식이죠. Alt-n과 Alt-p는 같은 레벨의 다음 노드와 이전 노드로 선택을 옮깁니다.

이동에도 같은 개념이 쓰입니다. ]f는 다음 함수로, [f는 이전 함수로 이동하고, ]t나 ]a처럼 글자만 바꾸면 타입이나 인자 단위로 건너뜁니다.

스페이스 모드와 피커

Helix의 기능 대부분은 스페이스 키 하나에서 출발합니다. 노멀 모드에서 Space를 누르면 다음과 같은 메뉴가 뜹니다.

Helix에서 스페이스 키를 눌렀을 때 뜨는 스페이스 모드 메뉴

단축키를 외우지 못해도 화면이 다음에 누를 키를 알려 주니 마음이 편합니다. g나 m처럼 다른 접두 키를 눌렀을 때도 똑같이 메뉴가 뜹니다.

가장 많이 쓰는 건 피커(picker)입니다. Space f는 파일 피커를 열어 프로젝트의 파일을 퍼지 검색하고, Space b는 열린 버퍼를, Space /는 프로젝트 전체 텍스트를 검색합니다. 파일 피커는 .gitignore를 존중하기 때문에 node_modules나 target 같은 디렉토리가 결과를 어지럽히지 않습니다. 25.07 버전부터는 Space e로 디렉토리를 트리 구조로 탐색하는 파일 탐색기도 생겼습니다.

시스템 클립보드도 스페이스 모드에서 다룹니다. y와 p는 Helix 내부 레지스터(register)를 쓰고, Space y와 Space p가 시스템 클립보드로 복사하고 붙여 넣습니다. 브라우저에서 복사한 코드를 붙여 넣으려는데 p가 엉뚱한 내용을 붙인다면 이 차이 때문입니다.

명령 이름은 아는데 키를 모를 때는 Space ?로 명령 팔레트(command palette)를 열어 검색하면 됩니다.

설정 없이 동작하는 LSP

Helix의 가장 큰 매력은 언어 서버 연동입니다. LSP를 쓰려고 플러그인을 설치할 필요가 없고, 언어마다 어떤 서버를 띄울지도 Helix가 이미 알고 있습니다. 우리가 할 일은 그 언어 서버 프로그램을 설치하는 것뿐입니다.

현재 환경에서 어떤 언어가 준비되었는지는 --health 옵션으로 확인합니다.

hx --health rust
결과
Configured language servers:
  ✓ rust-analyzer: /Users/dale/.cargo/bin/rust-analyzer
Configured debug adapter:
  ✘ 'lldb-dap' not found in $PATH
Configured formatter: None
Tree-sitter parser: ✓
Highlight queries: ✓
Textobject queries: ✓
Indent queries: ✓

rust-analyzer가 이미 설치되어 있어서 체크 표시가 붙었습니다. rustup으로 Rust를 설치했다면 다음 한 줄로 준비할 수 있습니다.

rustup component add rust-analyzer

TypeScript는 어떨까요?

hx --health typescript
결과
Configured language servers:
  ✘ typescript-language-server: 'typescript-language-server' not found in $PATH
Configured debug adapter: None
Configured formatter: None
Tree-sitter parser: ✓
Highlight queries: ✓
Textobject queries: ✓
Indent queries: ✓

Tree-sitter 문법은 Helix에 들어 있지만 언어 서버는 따로 설치해야 한다는 게 보이죠. Bun을 쓴다면 다음과 같이 설치합니다.

bun add -g typescript-language-server typescript

언어 서버가 준비되면 .rs나 .ts 파일을 여는 순간 자동으로 연결됩니다. 변수 위에서 Space k를 누르면 타입 정보가 팝업으로 뜹니다.

rust-analyzer가 알려준 counts 변수의 타입을 보여주는 Helix 호버 팝업

이 밖에 LSP 관련 키는 다음과 같습니다. gd는 정의로, gr은 참조 목록으로 이동합니다. Space r로 심볼 이름을 프로젝트 전체에서 바꾸고, Space a로 코드 액션(code action)을 실행하고, Space d로 진단 메시지 목록을 엽니다. 자동 완성은 삽입 모드에서 입력하는 동안 알아서 뜹니다.

config.toml로 취향 맞추기

기본값만으로도 충분히 쓸 만하지만, 조금씩 내 취향에 맞추고 싶어지는 순간이 옵니다. Helix의 설정 파일은 ~/.config/helix/config.toml입니다. 에디터 안에서 :config-open을 입력하면 이 파일이 바로 열리고, 고친 뒤에는 :config-reload로 재시작 없이 반영할 수 있습니다.

~/.config/helix/config.toml
theme = "catppuccin_mocha"

[editor]
line-number = "relative" # 상대 줄 번호
cursorline = true # 현재 줄 강조
bufferline = "multiple" # 버퍼가 2개 이상이면 상단에 탭 표시

[editor.cursor-shape]
insert = "bar" # 삽입 모드에서는 세로 막대 커서
normal = "block"
select = "underline"

[editor.indent-guides]
render = true # 들여쓰기 안내선 표시

[keys.normal]
C-s = ":write" # Ctrl-s로 저장

테마는 :theme을 입력하고 이름을 고르는 동안 실시간으로 미리 보기가 되니, 마음에 드는 걸 찾은 다음 설정 파일에 적으면 됩니다.

언어별 설정은 같은 디렉토리의 languages.toml에 적습니다. 예를 들어 TypeScript 파일을 저장할 때마다 Prettier로 포맷하고 싶다면 다음과 같이 씁니다.

~/.config/helix/languages.toml
[[language]]
name = "typescript"
auto-format = true
formatter = { command = "prettier", args = ["--parser", "typescript"] }

포맷터는 표준 입력으로 코드를 받아 표준 출력으로 돌려주는 프로그램이면 무엇이든 됩니다. Prettier를 쓰려면 Prettier가 PATH에 있어야 하는데요, 앞에서 본 hx --health typescript를 다시 실행하면 Configured formatter 항목에서 확인할 수 있습니다.

아직 아쉬운 점

장점만 늘어놓았으니 고민해 볼 부분도 짚고 넘어가겠습니다.

가장 큰 빈자리는 역시 플러그인 시스템입니다. Scheme 계열 언어인 Steel로 플러그인 시스템을 만드는 작업이 오랫동안 진행 중이지만, 2026년 10월 현재 해당 풀 리퀘스트는 아직 초안 상태로 본 저장소에 합쳐지지 않았습니다. 그래서 Git 연동을 깊게 쓰거나 AI 코딩 도우미를 에디터 안에 붙이는 식으로 확장하기는 어렵습니다. NeoVim의 방대한 플러그인 생태계에 기대고 있다면 이 점이 결정적일 수 있습니다.

또 Vim에 오래 익숙했던 손은 생각보다 고집이 셉니다. dd를 눌렀는데 아무 일도 일어나지 않거나, 습관처럼 x를 눌렀다가 줄이 통째로 선택되는 일이 한동안 반복될 거예요. 😅 반대로 Helix에 익숙해진 뒤에는 서버에서 Vim을 열었을 때 헷갈리기도 합니다.

그래도 이 단점들은 쓰는 사람에 따라 무게가 다릅니다. 실제로 Stack Overflow 2026 개발자 설문에서 Helix는 써 본 사람 중 계속 쓰고 싶다는 비율이 88.5%로 에디터 가운데 가장 높았습니다. 에디터 설정을 손보는 데 시간을 쓰고 싶지 않고, 터미널에서 가볍게 코드를 읽고 고치는 일이 많다면 Helix의 기본값은 꽤 훌륭한 출발점입니다. Zellij나 Ghostty 같은 터미널 도구와 함께 쓰면 GUI 에디터 없이도 개발 환경이 갖춰집니다.

마치며

지금까지 Helix를 설치하고, 선택 후 동작으로 이어지는 편집 문법과 다중 선택, Tree-sitter 텍스트 객체, 스페이스 모드, 설정 없이 붙는 LSP를 차례로 살펴봤습니다.

Helix는 Vim의 모달 편집이 주는 속도는 그대로 두고, 선택 영역을 눈으로 확인한 뒤 동작하게 바꿔서 실수를 줄인 에디터입니다. 그리고 플러그인 없이도 현대적인 IDE 기능 대부분을 기본으로 제공합니다. 설정 파일과 씨름하다 지쳤거나, 모달 편집에 입문하려는데 Vim의 진입 장벽이 부담스러웠다면 한번 hx --tutor부터 시작해 보세요. GUI 에디터 중에서 비슷하게 빠르고 가벼운 대안을 찾는다면 Zed도 함께 살펴볼 만합니다.

더 자세한 키 바인딩은 Helix 공식 문서의 Keymap 페이지를 참고하세요.

This work is licensed under CC BY 4.0CCBY

개발자를 위한 뉴스레터

달레가 정리한 AI 개발 트렌드와 직접 만든 콘텐츠를 전해드립니다.

Discord