나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2026-01-04 05:42:04

Helix


파일:다른 뜻 아이콘.svg  
#!if 넘어옴1 != null
''''''{{{#!if 넘어옴2 == null
{{{#!if 넘어옴1[넘어옴1.length - 1] >= 0xAC00 && 넘어옴1[넘어옴1.length - 1] <= 0xD7A3
{{{#!if ((넘어옴1[넘어옴1.length - 1] - 0xAC00) % 28) == 0
는}}}{{{#!if ((넘어옴1[넘어옴1.length - 1] - 0xAC00) % 28) != 0
은}}}}}}{{{#!if 넘어옴1[넘어옴1.length - 1] < 0xAC00 || 넘어옴1[넘어옴1.length - 1] > 0xD7A3
은(는)}}}}}}{{{#!if 넘어옴2 != null
, ''''''{{{#!if 넘어옴3 == null
{{{#!if 넘어옴2[넘어옴2.length - 1] >= 0xAC00 && 넘어옴2[넘어옴2.length - 1] <= 0xD7A3
{{{#!if ((넘어옴2[넘어옴2.length - 1] - 0xAC00) % 28) == 0
는}}}{{{#!if ((넘어옴2[넘어옴2.length - 1] - 0xAC00) % 28) != 0
은}}}}}}{{{#!if 넘어옴2[넘어옴2.length - 1] < 0xAC00 || 넘어옴2[넘어옴2.length - 1] > 0xD7A3
은(는)}}}}}}}}}{{{#!if 넘어옴3 != null
, ''''''{{{#!if 넘어옴4 == null
{{{#!if 넘어옴3[넘어옴3.length - 1] >= 0xAC00 && 넘어옴3[넘어옴3.length - 1] <= 0xD7A3
{{{#!if ((넘어옴3[넘어옴3.length - 1] - 0xAC00) % 28) == 0
는}}}{{{#!if ((넘어옴3[넘어옴3.length - 1] - 0xAC00) % 28) != 0
은}}}}}}{{{#!if 넘어옴3[넘어옴3.length - 1] < 0xAC00 || 넘어옴3[넘어옴3.length - 1] > 0xD7A3
은(는)}}}}}}}}}{{{#!if 넘어옴4 != null
, ''''''{{{#!if 넘어옴5 == null
{{{#!if 넘어옴4[넘어옴4.length - 1] >= 0xAC00 && 넘어옴4[넘어옴4.length - 1] <= 0xD7A3
{{{#!if ((넘어옴4[넘어옴4.length - 1] - 0xAC00) % 28) == 0
는}}}{{{#!if ((넘어옴4[넘어옴4.length - 1] - 0xAC00) % 28) != 0
은}}}}}}{{{#!if 넘어옴4[넘어옴4.length - 1] < 0xAC00 || 넘어옴4[넘어옴4.length - 1] > 0xD7A3
은(는)}}}}}}}}}{{{#!if 넘어옴5 != null
, ''''''{{{#!if 넘어옴6 == null
{{{#!if 넘어옴5[넘어옴5.length - 1] >= 0xAC00 && 넘어옴5[넘어옴5.length - 1] <= 0xD7A3
{{{#!if ((넘어옴5[넘어옴5.length - 1] - 0xAC00) % 28) == 0
는}}}{{{#!if ((넘어옴5[넘어옴5.length - 1] - 0xAC00) % 28) != 0
은}}}}}}{{{#!if 넘어옴5[넘어옴5.length - 1] < 0xAC00 || 넘어옴5[넘어옴5.length - 1] > 0xD7A3
은(는)}}}}}}}}}{{{#!if 넘어옴6 != null
, ''''''{{{#!if 넘어옴7 == null
{{{#!if 넘어옴6[넘어옴6.length - 1] >= 0xAC00 && 넘어옴6[넘어옴6.length - 1] <= 0xD7A3
{{{#!if ((넘어옴6[넘어옴6.length - 1] - 0xAC00) % 28) == 0
는}}}{{{#!if ((넘어옴6[넘어옴6.length - 1] - 0xAC00) % 28) != 0
은}}}}}}{{{#!if 넘어옴6[넘어옴6.length - 1] < 0xAC00 || 넘어옴6[넘어옴6.length - 1] > 0xD7A3
은(는)}}}}}}}}}{{{#!if 넘어옴7 != null
, ''''''{{{#!if 넘어옴8 == null
{{{#!if 넘어옴7[넘어옴7.length - 1] >= 0xAC00 && 넘어옴7[넘어옴7.length - 1] <= 0xD7A3
{{{#!if ((넘어옴7[넘어옴7.length - 1] - 0xAC00) % 28) == 0
는}}}{{{#!if ((넘어옴7[넘어옴7.length - 1] - 0xAC00) % 28) != 0
은}}}}}}{{{#!if 넘어옴7[넘어옴7.length - 1] < 0xAC00 || 넘어옴7[넘어옴7.length - 1] > 0xD7A3
은(는)}}}}}}}}}{{{#!if 넘어옴8 != null
, ''''''{{{#!if 넘어옴9 == null
{{{#!if 넘어옴8[넘어옴8.length - 1] >= 0xAC00 && 넘어옴8[넘어옴8.length - 1] <= 0xD7A3
{{{#!if ((넘어옴8[넘어옴8.length - 1] - 0xAC00) % 28) == 0
는}}}{{{#!if ((넘어옴8[넘어옴8.length - 1] - 0xAC00) % 28) != 0
은}}}}}}{{{#!if 넘어옴8[넘어옴8.length - 1] < 0xAC00 || 넘어옴8[넘어옴8.length - 1] > 0xD7A3
은(는)}}}}}}}}}{{{#!if 넘어옴9 != null
, ''''''{{{#!if 넘어옴10 == null
{{{#!if 넘어옴9[넘어옴9.length - 1] >= 0xAC00 && 넘어옴9[넘어옴9.length - 1] <= 0xD7A3
{{{#!if ((넘어옴9[넘어옴9.length - 1] - 0xAC00) % 28) == 0
는}}}{{{#!if ((넘어옴9[넘어옴9.length - 1] - 0xAC00) % 28) != 0
은}}}}}}{{{#!if 넘어옴9[넘어옴9.length - 1] < 0xAC00 || 넘어옴9[넘어옴9.length - 1] > 0xD7A3
은(는)}}}}}}}}}{{{#!if 넘어옴10 != null
, ''''''{{{#!if 넘어옴10[넘어옴10.length - 1] >= 0xAC00 && 넘어옴10[넘어옴10.length - 1] <= 0xD7A3
{{{#!if ((넘어옴10[넘어옴10.length - 1] - 0xAC00) % 28) == 0
는}}}{{{#!if ((넘어옴10[넘어옴10.length - 1] - 0xAC00) % 28) != 0
은}}}}}}{{{#!if 넘어옴10[넘어옴10.length - 1] < 0xAC00 || 넘어옴10[넘어옴10.length - 1] > 0xD7A3
은(는)}}}}}} 여기로 연결됩니다. 
#!if 설명 == null && 리스트 == null
{{{#!if 설명1 == null
다른 뜻에 대한 내용은 아래 문서를}}}{{{#!if 설명1 != null
{{{#!html 동음이의어}}}에 대한 내용은 [[헬릭스]] 문서{{{#!if (문단1 == null) == (앵커1 == null)
를}}}{{{#!if 문단1 != null & 앵커1 == null
의 [[헬릭스#s-|]]번 문단을}}}{{{#!if 문단1 == null & 앵커1 != null
의 [[헬릭스#|]] 부분을}}}}}}{{{#!if 설명2 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단2 == null) == (앵커2 == null)
를}}}{{{#!if 문단2 != null & 앵커2 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단2 == null & 앵커2 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명3 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단3 == null) == (앵커3 == null)
를}}}{{{#!if 문단3 != null & 앵커3 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단3 == null & 앵커3 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명4 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단4 == null) == (앵커4 == null)
를}}}{{{#!if 문단4 != null & 앵커4 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단4 == null & 앵커4 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명5 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단5 == null) == (앵커5 == null)
를}}}{{{#!if 문단5 != null & 앵커5 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단5 == null & 앵커5 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명6 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단6 == null) == (앵커6 == null)
를}}}{{{#!if 문단6 != null & 앵커6 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단6 == null & 앵커6 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명7 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단7 == null) == (앵커7 == null)
를}}}{{{#!if 문단7 != null & 앵커7 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단7 == null & 앵커7 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명8 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단8 == null) == (앵커8 == null)
를}}}{{{#!if 문단8 != null & 앵커8 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단8 == null & 앵커8 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명9 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단9 == null) == (앵커9 == null)
를}}}{{{#!if 문단9 != null & 앵커9 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단9 == null & 앵커9 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명10 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단10 == null) == (앵커10 == null)
를}}}{{{#!if 문단10 != null & 앵커10 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단10 == null & 앵커10 != null
의 [[#|]] 부분을}}}}}}
#!if 설명 == null
{{{#!if 리스트 != null
다른 뜻에 대한 내용은 아래 문서를}}} 참고하십시오.

#!if 리스트 != null
{{{#!if 문서명1 != null
 * {{{#!if 설명1 != null
동음이의어: }}}[[헬릭스]] {{{#!if 문단1 != null & 앵커1 == null
문서의 [[헬릭스#s-|]]번 문단}}}{{{#!if 문단1 == null & 앵커1 != null
문서의 [[헬릭스#|]] 부분}}}}}}{{{#!if 문서명2 != null
 * {{{#!if 설명2 != null
: }}}[[]] {{{#!if 문단2 != null & 앵커2 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단2 == null & 앵커2 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명3 != null
 * {{{#!if 설명3 != null
: }}}[[]] {{{#!if 문단3 != null & 앵커3 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단3 == null & 앵커3 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명4 != null
 * {{{#!if 설명4 != null
: }}}[[]] {{{#!if 문단4 != null & 앵커4 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단4 == null & 앵커4 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명5 != null
 * {{{#!if 설명5 != null
: }}}[[]] {{{#!if 문단5 != null & 앵커5 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단5 == null & 앵커5 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명6 != null
 * {{{#!if 설명6 != null
: }}}[[]] {{{#!if 문단6 != null & 앵커6 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단6 == null & 앵커6 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명7 != null
 * {{{#!if 설명7 != null
: }}}[[]] {{{#!if 문단7 != null & 앵커7 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단7 == null & 앵커7 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명8 != null
 * {{{#!if 설명8 != null
: }}}[[]] {{{#!if 문단8 != null & 앵커8 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단8 == null & 앵커8 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명9 != null
 * {{{#!if 설명9 != null
: }}}[[]] {{{#!if 문단9 != null & 앵커9 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단9 == null & 앵커9 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명10 != null
 * {{{#!if 설명10 != null
: }}}[[]] {{{#!if 문단10 != null & 앵커10 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단10 == null & 앵커10 != null
문서의 [[#|]] 부분}}}}}}

[[문서 편집기|'''📝 텍스트 에디터
{{{-2 {{{#!wiki style="font-family: monospace; display: inline"
]]
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -6px -1px -11px"
<colcolor=#fff,#fff><bgcolor=#66595c,#66595c> Windows 메모장 · EmEditor · Notepad++O · EditPlus
UNIX viO · vimO · nanoO · EmacsO
macOS BBEdit
크로스 플랫폼 Visual Studio CodeO(Antigravity · Cursor) · Sublime Text · NeovimO · HelixO · AtomO · Brackets · Typora · ZedO
오픈 소스O · 문서 작성 프로그램은 틀:문서 작성 도구 참고}}}}}}}}}
<colcolor=#fff,#fff><bgcolor=#452859,#452859> Helix
<colbgcolor=#452859,#452859> 종류 모달 텍스트 에디터
최초 개발자 Blaž Hrastnik
개발 Helix
출시 2021년 5월 12일[1]
안정 버전 v25.07.1 (2025년 7월 18일)
개발 언어 Rust
플랫폼 Linux, macOS, Windows#
라이선스 모질라 공용 라이선스 2.0#
링크 파일:홈페이지 아이콘.svg 파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg docs
1. 개요2. 특징3. 한계
3.1. 플러그인 시스템의 부재
4. 타 개발환경에서의 구현5. 관련 문서6. 외부 링크

1. 개요

파일:Helix screenshot.png
A post-modern text editor.[2]

TUI 기반 모달 텍스트 에디터로, Kakoune 방식의 선택-동작 방식의 모달 구조를 사용하는 것이 특징이다.

2. 특징

vim을 모던하게 재해석한 여러 차세대 모달 에디터 구현 중 하나로, 때문에 전반적인 느낌은 Neovim이나 Kakoune 등과 상당히 비슷한 편이다.

가장 두드러진 특징으로 Kakoune에서 영향을 받은 모달 구조를 채용했다. 기존의 vivim은 노멀 모드에서 텍스트 지우기(d), 자르고 인서트하기(c), 복사하기(y) 등의 operation을 먼저 선택하면 operation pending mode에 들어가고 이 상태에서 추가적인 motion 키를 입력하면 해당 영역에 동작이 수행되는 구조였으나, Kakoune식은 먼저 motion으로 영역을 선택하고, 그 다음에 동작을 수행하는 것으로 생각의 순서가 반대이다. 가령 vim에서는 ci" 등으로 동작(c) 먼저 지정 후 텍스트 오브젝트(i")를 선택했으나, Helix에서는 mi"c로 텍스트 오브젝트(mi") 먼저 선택한 다음 최종적으로 수행할 동작(c)을 입력한다.

쉽게 생각하면 모든 편집을 vi의 visual mode로 진행한다고 생각하면 좋다. Helix에서는 모든 모션마다 현재 선택되는 영역이 강조되고, 심지어 w와 같은 가장 단순한 모션조차 선택 영역을 만든다. 특히 vim에서는 <S-v>j로 해야 했던 줄 단위 선택을 xx만으로 똑같이 할 수 있는 등 선택-동작 방식에 최적화되도록 상당한 키가 재매핑되었다.

다만 vim에선 엉뚱하지만 익숙한 키도 전부 체계적으로 갈아엎었기에 vim을 오래 사용해왔다면 초반엔 마치 vim을 처음 배우던 때로 되돌어간 것 같은 상당한 러닝커브를 겪게 되는 단점이 있다. 가령 vim에서는 gg가 위고 <S-g>가 아래라고 익혔지만 Helix에서는 아래가 ge<S-g>는 아무 매핑도 되어 있지 않다던가. 이는 vim의 기존 동작에 거의 완벽한 호환성을 기본 원칙으로 하는 Neovim과 대조된다.

Kakoune이 처음부터 멀티 커서 지원을 염두에 두고 세심하게 설계되었기 때문에 Helix 또한 네이티브 멀티 커서라는 엄청난 장점을 가져간다. vim은 흔한 오해와 다르게 <C-v> 등의 visual block mode나 sed식 replace, :g/ 등만이 있을 뿐 Sublime Text 이후로 등장한 모던한 개념의 멀티 커서 기능은 없다.

아래 특징은 Neovim과 상당히 비슷한 편이다.

3. 한계

Neovim은 철저하게 프론트엔드-백엔드 구조로 설계되어 리모트 사용도 편하고, 무엇보다 독립 GUI 개발이 가능했으나, Helix는 현재 TUI 바이너리로만 제공된다. Neovide를 개발한 적 있는 Kethku가 연 디스커션#11783이 있으니 참고해 보는 것도 좋다.

3.1. 플러그인 시스템의 부재

While there is currently no plugin system available, we do intend to eventually have one. But this will take some time#

플러그인 시스템 구현이 6년째 다돼가도록 도입되지 못하고 있다. 처음 출시했을 때부터 플러그인 시스템 아키텍처를 어떻게 잡을지 가지고 정말 긴 논쟁이 이어졌고, 제자리걸음만 이어가다 결국 WebAssembly 기반 플러그인 시스템을 포기하고 steel 등의 단일 언어 인터페이스를 사용하기로 결정하는 것만 엄청 오래 걸렸다.#3806

2023년 steel 기반 플러그인 시스템 구현 PR이 draft로 올라왔지만#8675 3년 내내 아직도 정식 문서가 생기지도, 안정 버전으로 출시되지도, 메인에 머지되지도, draft에서 정식 PR로 전환되지도 않았다(...). 아직도 구현 중인데 정작 플러그인 수요는 많아서 수많은 문제나 기능이 일단 플러그인으로 defer된 다음 무기한 지연되고 있다.

당연히 코어는 최소한으로 유지하고 부가적인 기능을 플러그인으로 지원하는 것이 합리적인 결론이겠으나, 이러한 결정을 뒷받침할 플러그인 기능이 현재 존재하지도 않는다는 것이 문제가 되는 것. 때문에 플러그인을 만들 수 없으니 wakatime-ls 등 필요한 기능을 LSP 서버로 구현하는 등, 다소 편법에 가까운 방식으로만 제약적인 생태계가 유지되고 있어 문제가 많다. 다른 에디터라면 원하는 기능이 없으면 적당한 플러그인을 검색해서 사용하고, 그거라도 없으면 플러그인을 어떻게든 만들어 사용하는 방법이 가능하지만 Helix에서는 이것조차 불가능하기에 Helix 실사용에서 마주하는 온갖 문제를 해결하기 어려운 상황에 처하기 쉽다.

4. 타 개발환경에서의 구현

타 에디터나 개발환경에서의 Helix 에뮬레이션, 플러그인을 통한 구현을 정리한다.

5. 관련 문서

6. 외부 링크


[1] v0.0.2기준.[2] Neovim을 의도에 둔 작명이다. (It's a joke. If Neovim is the modern Vim, then Helix is post-modern.) #