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를 계속 지켜볼 생각이다. 어쩌면 곧 완전히 갈아타게 될지도 모르겠다.
글을 무작위로 읽기