GN⁺: Neovim을 떠나 Zed로 옮겨갑니다
(stevedylan.dev)- 모든 개발자는 자신만의 텍스트 편집기 여정을 가지고 있으며, 현재 사용하는 도구에 도달하는 과정을 겪음. 이러한 이야기들은 흥미롭고, 개발 도구와 그에 투입된 노력에 큰 감사를 표함
- 이 글은 개발 도구에 관심 있는 사람들에게 자신의 여정을 공유하고, 새로운 도구를 실험해보도록 격려하고자 작성되었음
텍스트 편집기 여정의 시작
- Atom을 처음 사용하며 HTML, CSS, Javascript의 기본을 배우기 시작
- VSCode로 전환했으나, 당시 아내가 사진 편집을 위해 노트북을 사용해야 했고, 대신 사용한 맥북이 VSCode의 Electron 빌드로 인해 성능 저하를 겪음
- 이때 우연히 Vim을 발견하고, 키보드 중심의 작업 흐름과 속도에 매료되어 Vim 학습을 시작
- 초기에는 Vim RC를 수정하며 사용했으며, 이후 chris@machine의 영상을 통해 Neovim을 알게 됨
- 수년간 Neovim을 사용하며 높은 생산성을 누림. 많은 시간을 들여 설정을 조정했으나, 결국 설정 변경이 거의 필요 없는 상태에 도달
변화
- 하지만 시간이 지남에 따라 설정 파일을 계속 간소화해야 했고, 기본적인 기능을 유지하기 위해서도 많은 노력이 필요했음
- 가끔 플러그인을 업데이트할 때마다 Neovim이 문제가 발생하며, 작업을 중단하고 문제를 해결하는 데 시간을 소비하게 됨. 이를 해결하기 위해 설정을 간소화하려 했으나, 기본적인 기능을 유지하기 위한 노력은 여전히 필요했음
- 특히 큰 코드베이스에서 작업할 때 Neovim이 느려지고 화면이 멈추는 등 문제가 발생, 생산성에 지장을 줌
- 다른 터미널 에뮬레이터(Alacritty, Wezterm 등)로 전환을 시도했으나 큰 차이는 없었음
- 이전에 Zed에 대해 들어본 적 있었으나, 터미널 기반이 아니어서 사용을 중단했음. 하지만 Zed의 속도에 대한 긍정적인 평가를 듣고 다시 시도하기로 결심
- 2개월 동안 매일 사용하면서, Zed가 매우 만족스러운 경험을 제공했으며, 앞으로도 계속 사용할 계획임. Neovim으로 돌아갈 생각이 없음
Zed 사용 경험
- Zed를 선택하게 된 이유를 이해하기 위해, 지금까지의 일반적인 사용 경험과 나에게 어떻게 맞췄는지에 대해 설명하고자 함
모든 것이 "그냥 잘 작동함"
- Zed의 가장 큰 장점 중 하나는 "모든 것이 그냥 잘 작동한다"는 것
- 특히 언어 서버 프로토콜(LSP)과 같은 기능은 Neovim에서 설정하는 데 많은 시간이 걸리지만, Zed에서는 기본적으로 잘 작동함
- Zed에서는 "정의 보기", "정의로 이동", "코드 작업"과 같은 키 바인딩이 기본으로 제공되며, 대부분의 언어를 지원해 문제가 발생하지 않음
속도
- Zed를 선택한 주요 이유 중 하나는 속도였으며, 결과적으로 매우 만족스러웠음
- 큰 코드베이스에서도 지연 없이 빠르게 작동하며, 지금까지 성능 문제를 경험한 적이 없음
- Neovim의 속도를 더 빠르게 만들 수 있겠지만, 생산성 향상을 위해 시간을 낭비하는 것보다 Zed를 사용하는 것이 더 나음
Vim 모드
- Neovim 사용자로서, VSCode의 Vim 플러그인이 불안정하고 버그가 많아 실망했던 경험이 있음
- Zed의 Vim 모드는 개발자가 직접 만든 기능으로, 매우 안정적이며 중요한 기능을 잘 지원함
- 키 바인딩 구조가 매우 유연하며, Vim 사용자들이 좋아할 만한 기능들을 제공함
AI 기능
- Zed는 AI 기능도 제공하며, 기본적으로 Copilot이 내장되어 있음
- OpenAI, Ollama, Anthropic 등의 AI 모델을 API를 통해 사용할 수 있음
- 코드 일부를 선택하고
ctrl-enter
로 AI 어시스턴트를 호출해 코드를 작성하는 인라인 어시스턴트 기능도 유용함
Zed ≠ Neovim
- Zed가 Neovim을 완전히 대체할 수는 없음. Neovim은 터미널에 네이티브로 존재하는 것이 큰 강점임
- 간단한 파일 수정 작업에는 Neovim이 더 편리하지만, 장기적인 세션이나 프로젝트에는 Zed가 완벽함
Neovim 사용자에게 Zed를 맞춤 설정하기
Zed는 Neovim의 완전한 대체품은 아니지만, Neovim/Vim 사용자에게 익숙한 환경을 제공하기 위해 다양한 작은 설정들을 통해 경험을 크게 개선할 수 있음
Vim 모드 및 키 바인딩
- 첫 번째로 할 일은 Vim 모드를 활성화하는 것. Zed는 Vim 모드에 대한 문서 페이지를 제공하며, 기본 Vim 바인딩과 추가 설정 방법을 안내함
- Zed의 큰 장점 중 하나는 Vim 모드에 따라 키 바인딩을 설정할 수 있다는 점. 예를 들어, "Normal" 모드와 "Visual" 모드에 다른 키 바인딩을 적용할 수 있음
[
{
"context": "Editor && VimControl && !VimWaiting && !menu",
"bindings": {
"space b": "editor::ToggleGitBlame",
"shift-k": "editor::Hover",
"space l f": "editor::Format",
"space d": "diagnostics::Deploy",
"space f f": "file_finder::Toggle",
"space o": "tab_switcher::Toggle",
"space e": "workspace::ToggleLeftDock",
"space /": "workspace::NewSearch",
"n": "search::SelectNextMatch",
"shift-n": "search::SelectPrevMatch",
"space t": "workspace::NewCenterTerminal",
"g b": "editor::ToggleComments",
"+ +": "workspace::Save",
"space c": "pane::CloseActiveItem"
}
},
{
"context": "Editor && vim_mode == visual && !VimWaiting && !VimObject",
"bindings": {
"shift-j": "editor::MoveLineDown",
"shift-k": "editor::MoveLineUp"
}
},
]
- 또한, Zed에서 패널을 전환하는 키 바인딩을 설정해 Neovim과 유사한 작업 흐름을 만들 수 있음
[
{
"context": "Dock || Terminal || Editor",
"bindings": {
"ctrl-h": ["workspace::ActivatePaneInDirection", "Left"],
"ctrl-l": ["workspace::ActivatePaneInDirection", "Right"],
"ctrl-k": ["workspace::ActivatePaneInDirection", "Up"],
"ctrl-j": ["workspace::ActivatePaneInDirection", "Down"]
}
},
]
- 기본 Vim 키맵을 참고하여 필요한 설정을 조정하는 것도 추천함. 기본 Vim 키맵은 Zed에서 지원하는 내용과 조정할 부분에 대한 유용한 참조 자료임
간소화된 UI
- Zed는 이미 최소한의 UI를 제공하지만, Neovim 설정과 더 비슷한 UI를 선호하는 경우, 탭 바, 스크롤 바, 툴바 등을 비활성화할 수 있음
{
"cursor_blink": false,
"relative_line_numbers": true,
"scrollbar": {
"show": "never"
},
"vertical_scroll_margin": 0,
"tab_bar": {
"show": false
},
"toolbar": {
"breadcrumbs": true,
"quick_actions": false
},
}
플러그인 대체
- Zed에서 텔레스코프(Telescope)와 유사한 기능으로 파일이나 버퍼 간의 탐색을 위해 탭 전환기(Toggle)를 사용할 수 있음
{
"context": "Editor && VimControl && !VimWaiting && !menu",
"bindings": {
"space o": "tab_switcher::Toggle",
}
}
- 프로젝트 전체 검색은 텔레스코프의 대체품으로, 다중 버퍼 보기를 통해 결과를 확인하고 쉽게 탐색할 수 있음
- 터미널 토글은 VSCode와 유사하지만, Zed에서는 메인 편집 뷰에서 버퍼로 터미널을 열 수 있는 옵션도 있음
{
"context": "Editor && VimControl && !VimWaiting && !menu",
"bindings": {
"space t": "workspace::NewCenterTerminal",
}
}
- Tmux와 프로젝트 전환 기능을 완전히 대체할 수는 없지만, Zed의 프로젝트 전환 기능이 이 작업을 상당히 잘 수행함
{
"context": "Workspace",
"bindings": {
"cmd-k": [
"projects::OpenRecent",
{
"create_new_window": false
}
]
}
}
Zed를 사용해야 할까?
- Zed를 시도해볼지 고민 중이라면, 며칠 동안 사용해보는 것을 추천함
- Zed는 독특하고 유능한 텍스트 편집기이며, 궁극적으로는 생산성을 높여주는 도구가 중요함
- 그것이 VS Code, JetBrains, 혹은 EMacs가 될 수도 있음
- 자신에게 가장 적합한 도구를 선택하되, 새로운 것을 시도해보는 데 너무 완고하지 않기를 바람
Hacker News 의견
-
Zed를 처음에는 좋아했지만, 협업 및 AI 기능에 집중하면서 기본 편집기로서의 기능이 부족해져서 덜 유용해짐
- 현재는 예전 편집기와 IDE로 돌아갔으며, 나중에 다시 시도할 예정임
-
Helix를 사용하는 이유는 VSCodium에서 Vim이나 Neovim으로 전환하려 했으나 플러그인 설정이 어려웠기 때문임
- Helix는 바로 작동하여 사용 중이며, 키 바인딩이 직관적이고 Vim 키 바인딩도 익힐 수 있었음
- 기본 색상 테마가 다소 충격적임
-
최근 Vim에서 Zed로 전환했으며, Zed가 여러 면에서 훌륭하다고 생각함
- 그러나 기본 기능에 많은 버그가 있어 AI 통합 등보다 기본 기능에 우선순위를 두었으면 좋겠음
-
Zed를 사용할 때 매우 빠르고 깔끔한 UI를 즐김
- Git 통합과 원격 지원이 더 좋다면 완전히 전환할 수 있을 것임
-
6개월 전 VSCode에서 Zed로 전환했으나 최근 Neovim으로 다시 전환함
- Zed의 Vim 통합 접근 방식을 좋아했으나, 기본 기능 부족과 버그로 인해 Neovim으로 전환함
- Zed가 성숙해지면 다시 돌아갈 의향이 있음
-
Zed가 더 다듬어지고 안정화되기를 기대함
- 그때까지는 Sublime Text 4를 사용 중이며, 성능이 뛰어나고 LSP 확장과 Sublime Merge가 VSCode의 빈틈을 메워줌
-
Neovim 배포판을 사용해 보았는지 궁금함
- LazyVim, AstroVim, NvChad와 같은 배포판은 필요한 플러그인과 통합이 이미 설정되어 있음
-
VSCode에서 진정한 Neovim을 원한다면
vscode-neovim
을 확인해 볼 것을 추천함- 실제 VIM과 VSCode의 모든 기능을 함께 사용할 수 있음
-
Kakoune와 Helix에 관심을 가지게 되어 VSCode용 모달 편집 확장을 작성함
- VIM의 대부분의 기능을 지원하며, AST 기반의 새로운 동작과 모드를 추가함
- 블로그 포스트를 작성할 계획임
-
macOS에서 Zed를 탐험했을 때 빠르고 기능이 풍부한 편집기라는 인상을 받음
- 그러나 *nix 시스템에서는 vi/vim만큼 보편적이지 않음
- 다양한 인프라와 배포 제약을 고려할 때, 보편적인 편집기에 집중하는 것이 더 쉬움
- Zed가 vi/vim의 대안이 될 수 있지만, 대부분의 vi/vim 사용자가 전적으로 전환할 가능성은 낮음
저도 최근 Helix로 넘어왔습니다.
Hacker News 의견처럼 기존 NeoVim에서 플러그인을 모두 활용하지 않아서 helix를 테스트해보고 바로 넘어오게 되었는데요. 색상 테마가 정말 충격적이긴 합니다