My experience switching to Zed from NeoVim

Ellie Huxtable

NeoVim에서 Zed로 갈아탄 경험

원문은 Ellie Huxtable님이 에 게재했습니다. 이 블로그 구독하기

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

그 이후로 수많은 에디터를 써봤지만 결국 항상 Vim으로 돌아왔다. VSCode도 괜찮았지만 Vim 에뮬레이션이 영 어색했다. 자꾸 헛발질을 하게 됐고 경험 자체가 매우 거슬렸다. 에디터가 너무 복잡하다는 느낌도 들었다. 그냥 조용히 텍스트나 편집하게 내버려 두면 좋겠다.

emacs(정확히는 evil)와 helix 등 다른 에디터도 써봤다.

하지만 지금까지 중에서는 Zed가 나를 끌어들이는 데 가장 가까웠다. 작년쯤 한 번 써봤을 때는 아직 다듬어지지 않은 느낌이었고, 게다가 당시에는 오픈소스도 아니었다.

Atuin이라는 Rust 프로젝트로 시작했다. 툴링이 모두 자동으로 설정됐고 내가 따로 설정할 필요가 없었다. 좋았다!

설정

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 에뮬레이션에 아직 몇 가지 빈틈이 있다. 나는 마크를 꽤 많이 쓰는데, 아직 지원되지 않아 자꾸 걸리적거렸다. 가끔 jj 바인딩이 동작하지 않는 것 같기도 했다. 너무 빨리 눌러서 그런 걸지도 모른다. 쉽게 재현할 수는 없었고, 그냥 가끔 발생했다.

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

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

댓글