My experience switching to Zed from NeoVim

Ellie Huxtable

NeoVim에서 Zed로 갈아탄 경험담

적어도 지난 10년은 Vim/NeoVim을 써 왔다. 워크플로가 점점 터미널 중심으로 바뀌면서 Sublime Text에서 넘어왔다.

그 뒤로 정말 많은 에디터를 써 봤지만 결국은 늘 Vim으로 돌아왔다. VSCode도 괜찮았지만 Vim 에뮬레이션이 어딘가 미묘하게 어긋났다. 자꾸 발이 꼬였고 경험 자체가 꽤 거슬렸다. 에디터가 너무 복잡하게 느껴지기도 했다. 그냥 텍스트 편집에만 집중하게 내버려 뒀으면 좋겠다!

emacs(정확히는 evil), helix 등도 써 봤다.

하지만 지금까지 중에서는 Zed가 나를 갈아타게 할 뻔한 가장 유력한 후보였다. 작년쯤 한 번 써 봤을 때는 아직 다듬어지지 않은 느낌이었고, 게다가 그때는 오픈 소스도 아니었다.

Rust 프로젝트인 Atuin부터 시작해 봤다. 툴링이 전부 자동으로 설정됐고 따로 손댈 게 전혀 없었다. 좋았다!

설정

Zed는 기본 상태로도 꽤 괜찮지만, 몇 가지는 바꾸고 싶었다.

내 설정 전체는 다음과 같다:

{
  "theme": "Gruvbox Dark Soft",
  "vim_mode": true,
  "buffer_font_size": 12,
  "ui_font_size": 14,
  "buffer_font_family": "FiraCode Nerd Font",
  "relative_line_numbers": true,
  "terminal": {
    "line_height": "standard"
  },
  "lsp": {
    // Specify the LSP name as a key here.
    "rust-analyzer": {
      //These initialization options are merged into Zed's defaults
      "initialization_options": {
        "checkOnSave": {
          "command": "clippy"
        }
      }
    }
  }
}

테마나 폰트 같은 눈에 띄는 설정을 빼면, 기본 상태에서 터미널 줄 간격이 좀 어색했다. 생각보다 높게 잡혀 있어서 일부 TUI가 이상하게 보였다. "standard"로 바꾸니 해결됐다.

Rust용 lsp 설정도 조금 손봤다.

키 바인딩

다음으로 손본 건 Vim 바인딩이다. 기본값도 꽤 표준적이지만, 생산성을 위해서는 꼭 필요한 핵심 커스텀이 몇 가지 있다.

  • jj - 손가락을 홈 로우에 둔 채로 쓸 수 있게 jj를 esc로 매핑한다
  • <leader>w - 현재 버퍼 저장
  • <leader>s t - 워크스페이스 전체에서 grep
  • <leader>f - 파일 검색

내가 알기로 Zed에는 leader라는 개념이 없다. 괜찮다! 바인딩을 직접 지정하면 되니까.

내 설정은 다음과 같다:

[
  {
    "context": "Editor && vim_mode == insert && !menu",
    "bindings": {
      "j j": "vim::NormalBefore"
    }
  },
  {
    "context": "Editor && vim_mode == normal && !menu",
    "bindings": {
      "space w": "workspace::Save",
      "space s t": "workspace::NewSearch",
      "space f": "file_finder::Toggle"
    }
  }
]

키맵에서 context를 표현식으로 지정할 수 있다는 점이 꽤 멋지다고 느꼈다. inoremap 같은 것보다 훨씬 읽기 쉽다.

다른 액션은 기본 키 바인딩에서 찾을 수 있다(cmd-shift-p에서 default keybindings 검색)

편집 경험

Zed는 써 보니 정말 만족스러웠다. 모든 동작이 버터처럼 부드럽고, 성능에 정말 많은 공을 들였다는 것이 느껴진다. UI는 미니멀해서 Sublime이 살짝 떠오르기도 한다.

이들의 UI 프레임워크는 Rust로 작성됐고, 앞으로 이를 활용한 애플리케이션이 더 많이 나오길 기대한다!

정착할 수 있을까?

아직은 아니다. 하지만 아슬아슬했다! 지금까지 시도해 본 다른 어떤 에디터보다 오래 썼지만, 에디터 안에 터미널이 있는 형태보다는 터미널 안에 에디터가 있는 형태에 익숙해서 여전히 어색하게 느껴진다. 이건 전적으로 내 문제고 Zed의 문제는 아니다.

그 밖에도 vim 에뮬레이션에는 아직 빈틈이 몇 군데 있다. 나는 marks를 꽤 자주 쓰는데, 아직 지원되지 않아 자꾸 걸렸다. 가끔 jj 바인딩이 동작하지 않을 때도 있었다. 아마 너무 빨리 눌러서 그런 것 같다. 쉽게 재현되지는 않았고 그냥 가끔 발생했다.

앞으로도 Zed를 계속 지켜볼 생각이다. 어쩌면 곧 완전히 갈아타게 될지도 모르겠다.

원문은 Ellie Huxtable님이 에 게재했습니다.

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.