sim과 Vim, Neovim, Helix

Vim, Neovim, Helix는 성숙하고 강력한 에디터이고, sim은 새로 나온 에디터입니다. 이 표는 1차 출처, 곧 각 에디터의 공식 문서, CVE 항목, 릴리스 노트, 이슈 트래커로 확인할 수 있는 내용만 다룹니다. 출처가 말하지 않는 부분은 표에도 쓰지 않았습니다.

2026-10-17에 확인했습니다. 당시 최신 릴리스는 Vim 9.2.1202, Neovim 0.12.6, Helix 25.07.1입니다.

항목VimNeovimHelixsim
확장 시스템Vim script와 패키지.[1]Lua, 그리고 Vim script 플러그인.[2]릴리스 버전에는 플러그인 시스템이 없습니다. Scheme(Steel) 기반 플러그인 시스템은 아직 열려 있는 초안 풀 리퀘스트입니다(#8675, 2026-10-09 갱신). 최신 릴리스는 25.07.1(2025년 7월)입니다.[3] [4]의도적으로 없음: 플러그인은 sim이 만들지 않는 것의 목록에 올라 있습니다.
모드라인(파일 안의 설정)기본값은 켜짐(root는 꺼짐). 패치 9.2.0350(2026년 4월)부터 모드라인에서 설정할 수 있는 옵션은 짧은 목록으로 제한됩니다('modelinestrict', 기본값 켜짐). 과거의 CVE: CVE-2019-12735, CVE-2026-34982.[5] [6] [7] [8]기본값은 켜짐(root는 꺼짐). 'modelineexpr'는 꺼짐. 매뉴얼은 신뢰할 수 없는 텍스트를 편집하기 전에 모드라인을 끄라고 안내합니다. CVE-2019-12735는 0.3.6에서 수정되었습니다.[9] [7]모드라인을 해석하지 않습니다. 요청(#729)은 열려 있고, 풀 리퀘스트(#7788)는 머지되지 않은 채 닫혔습니다.[10] [11]읽지 않습니다. 설정과 명령은 파일 내용에서 오지 않습니다.
프로젝트별 설정'exrc'는 기본값이 꺼짐입니다. 매뉴얼은 이 옵션을 켜는 것을 “a potential security leak”(잠재적인 보안 누출)이라 부르고 “BETTER NOT SET THIS OPTION!”(이 옵션은 설정하지 않는 편이 낫다!)이라고 적고 있습니다.[5]'exrc'는 기본값이 꺼짐입니다. 켜면 .nvim.lua, .nvimrc, .exrc는 신뢰 목록(:trust)에 있는 파일일 때만 실행됩니다.[9]워크스페이스의 .helix/config.toml을 불러옵니다(25.07.1 기준 문서에 있음). 먼저 확인을 묻는 워크스페이스 신뢰(PR #15177, 2026년 3월 머지)는 개발 브랜치에 있으며 아직 어느 릴리스에도 들어 있지 않습니다.[12] [13] [14] [3]설정 파일이 없고, 불러올 프로젝트별 설정도 없습니다.
양방향 제어 문자(U+202E 등)<202e>로 표시됩니다. 매뉴얼에 따르면 출력할 수 없는 문자와 너비가 0인 Unicode 문자는 <xxxx>로 표시되고, 출력할 수 없는 문자에는 SpecialKey 하이라이트가 쓰입니다.[5]SpecialKey 하이라이트로 <202e>, <2066> 등으로 표시됩니다(기본 컬러 스킴에서는 시안색, 저희 테스트에서). U+200B–200F, U+202A–202E, U+2060–206F, U+FEFF가 출력할 수 없는 문자 표에 들어 있습니다.[9] [15]릴리스 25.07.1에는 눈에 보이는 표시가 없습니다(저희 테스트에서는 빈 셀 하나를 차지했습니다). 너비가 0인 문자는 열려 있는 이슈(#11255)이고, 제어 문자는 터미널에 그대로 기록됩니다(#16320, 열림).[16] [17] [3]어떤 상태에서도 마젠타 블록 위의 <U+202E>로 표시되며, 터미널에 그대로 전송되지 않습니다. 문자 그대로의 텍스트 <U+202E>에는 블록이 붙지 않습니다.
다른 프로세스가 바꾼 파일파일의 타임스탬프, 모드, 크기를 기억해 두었다가 달라지면 경고합니다(셸 명령 뒤, GUI에서는 포커스를 얻을 때, :checktime으로 확인). 'autoread'는 변경하지 않은 버퍼를 다시 읽습니다.[18]같은 확인과 경고가 있으며, 'autoread'는 변경하지 않은 버퍼를 다시 읽습니다.[19]쓰기가 “file modified by an external process, use :w! to overwrite”(외부 프로세스가 파일을 수정함, 덮어쓰려면 :w! 사용)라는 메시지와 함께 거부됩니다(#6492에서 인용). 자동 다시 읽기는 열려 있는 요청(#1125)입니다.[20] [21]열린 파일을 감시하고, 바뀐 부분을 텍스트, 탭, 트리에 표시하며, 저장하기 전에 파일의 해시를 비교합니다. 파일이 바뀌었다면 아무것도 쓰지 않습니다. 그 확인과 같은 순간의 쓰기는 빠져나갈 수 있습니다.

sim: 프로젝트 자체 사양(README.md, SPEC.md, sim/SPEC.md, sim/CONCEPT.md).

보이지 않는 문자, 실측

아무것도 그리지 않거나 터미널에 작용하는 문자의 종류마다, 그 문자를 넣은 작은 파일을 터미널에서 열었을 때 Neovim 0.12.5과 sim이 무엇을 보여 주었는지 정리했습니다. 측정한 것은 Neovim뿐이므로, 이 표에 나오는 다른 편집기는 Neovim뿐입니다.

측정일은 2026-10-18입니다. Neovim 0.12.5(nvim --clean)과 커밋 d3caae2의 sim으로 측정했으며, 이 커밋은 sim 0.2.0에 들어 있습니다. 최신 릴리스인 Neovim 0.12.6은 측정하지 않았습니다.[22]

문자 종류Neovim 0.12.5sim
U+200B 너비가 0인 공백<200b><U+200B>
글자 사이의 U+200D 너비 0 결합자표시 없음<U+200D>
Trojan Source: U+202E, U+2066, U+2069<202e> <2066> <2069><U+202E> <U+2066> <U+2069>
태그 문자(ASCII smuggling)표시 없음<U+E0049> …
글자 뒤의 변형 선택자(U+FE00–FE03, U+E0155 등)표시 없음<U+FE00> … <U+E0155> …
한자 뒤의 표의 문자 변형 선택자표시 없음葛<U+E0100>
한글 채움 문자 U+3164, U+115F, U+FFA0표시 없음<U+3164> <U+115F> <U+FFA0>
소프트 하이픈 U+00AD와 결합 자소 연결자 U+034F표시 없음<U+00AD> <U+034F>
단어 결합자 U+2060<2060><U+2060>
줄 구분자 U+2028표시 없음<U+2028>
미할당 U+0378, 비문자 U+FDD0표시 없음<U+0378> <U+FDD0>
비문자 U+FFFF<ffff><U+FFFF>
파일 중간의 U+FEFF<feff><U+FEFF>
ESC와 DEL^[ ^?^[ ^?
C1 제어 문자 U+0085<85><U+0085>
사용자 정의 영역(Nerd Font 아이콘)그대로그대로
결합자와 선택자가 있는 이모지, 키캡, 잉글랜드 깃발그대로그대로

sim이 보여 주는 15가지 중 Neovim이 표시한 것은 7가지이고, 8가지는 표시 없이 그렸습니다.[23] [24] [25] [26]

“표시 없음”은 터미널에 문자 자체가 전달되었고 편집기가 아무 표시도 하지 않았다는 뜻입니다. “그대로”는 둘 다 일부러 손대지 않은 경우입니다(Nerd Font 아이콘, 이모지 시퀀스). 나머지 칸은 그 문자 자리에 그려진 것입니다.

sim 열은 커밋 d3caae2의 sim입니다. 파일, 명령, 각 행은 그 커밋의 sim NOTES.md에 적혀 있습니다.

sim으로 연 작은 Rust 파일. 태그 문자에 숨긴 지시, 변형 선택자에 숨긴 페이로드, 양방향 제어 문자, 한글 채움 문자, 소프트 하이픈, 너비가 0인 공백이 각각 마젠타 블록 위에 <U+202E> 같은 보이는 코드로 그려져 있다.
sim, 같은 파일: 숨은 문자는 모두 마젠타 블록 위의 보이는 <U+XXXX>가 됩니다.
Neovim 0.12.5로 연 같은 파일. 태그 문자, 변형 선택자, 채움 문자, 소프트 하이픈은 전혀 그려지지 않고, 양방향 제어 문자와 너비가 0인 공백만 <202e>, <200b>로 보인다.
Neovim 0.12.5, 같은 파일: 태그 문자와 선택자가 그려지지 않으므로 페이로드 줄은 "a";로 읽히고 첫 줄은 무해한 주석으로 읽힙니다. 그려진 것은 <202e>, <2066>, <2069>, <200b>뿐입니다.

같은 측정에서 드러나는 sim 방식의 대가입니다. 보여 주는 문자는 그 꼴의 칸 수를 차지하므로(4자리 코드는 8칸, 5자리 코드는 9칸) 많으면 줄이 길어집니다. 한자 뒤의 표의 문자 변형 선택자는 표시됩니다. 그리고 이 표시는 끌 수 없습니다.

다른 에디터가 아직은 더 잘하는 것

sim은 폭넓음을 내주고, 고정되어 확인할 수 있는 동작을 택했습니다. 아래 중 하나라도 지금 필요하다면 다른 에디터를 사용하십시오.

  • Neovim과 Helix에는 언어 서버 클라이언트가 들어 있습니다. sim에는 아직 없으며, 샌드박스 안에서 실행되는 클라이언트를 계획하고 있습니다.[27] [28]
  • Vim과 Neovim은 패키지와 플러그인으로 확장할 수 있습니다. sim은 플러그인을 제공하지 않을 것입니다.[1] [2]
  • Vim과 Neovim은 매크로를 기록하고 재생할 수 있습니다. sim에는 아직 매크로가 없으며 예정되어 있습니다. 레지스터와 마크는 sim 0.2.0에 있습니다.[1]

확인 방법

문서는 최신 릴리스 태그에 고정했습니다. 이슈와 풀 리퀘스트는 위 날짜 기준의 상태로 인용했으며, 그 상태는 바뀔 수 있습니다. 항목에 “저희 테스트에서”라고 적힌 곳은, 해당 릴리스에서 실제 U+202E가 들어 있는 파일을 열어 무엇이 그려지는지 직접 확인한 것입니다. 출처만으로는 말할 수 없는 내용입니다. 여기에 오래되었거나 틀린 내용이 있다면 바로잡아야 합니다.

출처

  1. Vim 9.2.1202, runtime/doc/repeat.txt (packages, recording)
  2. Neovim, Lua guide
  3. Helix 25.07.1 release (the latest, July 2025)
  4. Helix PR #8675: Add Steel as an optional plugin system (draft, open)
  5. Vim 9.2.1202, runtime/doc/options.txt ('modeline', 'modelinestrict', 'exrc', 'isprint', 'fsync')
  6. Vim patch 9.2.0350: Enabling modelines poses a risk ('modelinestrict')
  7. NVD: CVE-2019-12735 (Vim before 8.1.1365 and Neovim before 0.3.6, modeline)
  8. NVD: CVE-2026-34982 (Vim before 9.2.0276, modeline sandbox bypass)
  9. Neovim 0.12.6, runtime/doc/options.txt ('modeline', 'modelineexpr', 'exrc', 'isprint', 'fsync')
  10. Helix issue #729: Vim modeline parsing (open)
  11. Helix PR #7788: add basic modeline support (closed, not merged)
  12. Helix 25.07.1, book/src/configuration.md (a config.toml local to a project)
  13. Helix PR #15177: Add workspace trust support (merged 2026-03-26)
  14. Helix development branch, book/src/workspace-trust.md
  15. Neovim 0.12.6, src/nvim/mbyte.c (utf_printable)
  16. Helix issue #11255: Substitute unprintable characters in a buffer (open)
  17. Helix issue #16320: C0 control characters are written raw (open)
  18. Vim 9.2.1202, runtime/doc/editing.txt (timestamps)
  19. Neovim 0.12.6, runtime/doc/editing.txt (timestamps, 'autoread')
  20. Helix issue #6492: make the “file modified by an external process” message louder
  21. Helix issue #1125: automatic reload when file changes externally (open)
  22. sim, NOTES.md at commit d3caae2: “Hidden characters in Neovim 0.12.5, measured against sim” (2026-10-18)
  23. The Unicode Standard 18.0, chapter 23, Special Areas and Format Characters (§23.4 Variation Selectors, §23.9 Tag Characters)
  24. Unicode Technical Standard #51: Unicode Emoji, revision 31 (ZWJ sequences, emoji tag sequences, Annex C)
  25. Johann Rehberger, ASCII Smuggler Tool: Crafting Invisible Text and Decoding Hidden Codes (Embrace The Red, 14 January 2024)
  26. Endor Labs, Invisible Threats and the Blind Spots of Security (an analysis of GlassWorm)
  27. Neovim, LSP client
  28. Helix README (features)