はじめに
先日、愛用していたVSCodeからZedエディタへ乗り換えをしました。docker、devcontainer辺りで恋しくならない限り戻ることはないかなと思ってます。
この記事では、私と同じようにZedエディタへの移行を考えている方のために、最初におすすめしたい設定をご紹介します。全てを網羅するわけではありませんが、これだけでも快適な開発環境を構築できるはずです。
Zedエディタとは
Zedエディタは、Rust言語で開発された、高速で軽量なテキストエディタです。かつてAtomやTree-sitterの開発に携わったメンバーによって作られ、現在はGitHubでオープンソースとして公開されています。
これまでmacOSとLinuxで動作していましたが、なんと先日10月15日にはWindows版の安定版も正式リリースされました!
Windows上にインストールすると「Remote機能」でWLS2上からでも実行できます!
おすすめ設定
私が現在使用している、特におすすめの設定をご紹介します。
左上の三味線マークから「Open Settings File」を選択すると、設定用のJSONファイルが開きます。このファイルに、以下の設定をペーストしていくと良いと思います。
テーマ
カラーテーマはデフォルトで用意されているAyu Darkを使っています。黒の発色が良く、どのプログラミング言語でもコードが見やすいと感じています。
VS Codeのように、拡張機能から別のカラーテーマをインストールすることも可能です。その場合は、Zedの公式サイトの拡張機能ページからダウンロードできます。
また、こちらのリンクからは、インストール可能なテーマ集を閲覧できますので、ぜひ自分にぴったりのテーマを探してみてください!
"theme": {
"mode": "dark",
"light": "Ayu Light",
"dark": "Ayu Dark"
},
ファイルアイコン
VS Codeでも愛用していたMaterial Icon Themeをインストールしています。
"icon_theme": {
"mode": "dark",
"light": "Zed (Default)",
"dark": "Material Icon Theme"
},
タブデザイン
こちらの設定でタブ部分にファイルアイコンが表示されるようになります。さらにgit_statusをtrueに設定することで、タブの右側にGitのステータスが表示され、差分確認が格段にしやすくなります。ぜひ追加しておきましょう。
"tabs": {
"file_icons": true,
"git_status": true
},
エディタのフォント設定
日本語フォントはbuffer_font_fallbacksで設定できます。行の高さはcomfortableに設定すると、読みやすい1.618の比率になりおすすめです。
{
"ui_font_size": 16,
"buffer_font_size": 15,
"buffer_font_fallbacks": ["Noto Sans JP"],
"buffer_font_weight": 400,
"buffer_line_height": "comfortable",
}
基本キーマップ設定
基本キーマップは、VSCode、Atom、JetBrains、SublimeText、TextMate、Noneから選択できます。以前使っていたエディタに合わせて設定するのが最もスムーズでしょう。
{
"base_keymap": "VSCode"
}
Vimモード
Vimモードを有効にすると、Vimライクなコーディング体験ができます。relative_line_numbersをtrueにすると、行番号が相対表示になり便利です。また、use_system_clipboardをon_yank、always、neverの3つから設定することで、ヤンクしたテキストの保存先をシステムクリップボードにするかどうかを制御できます。
"vim_mode": true,
"vim": {
"use_system_clipboard": "always"
// "use_smartcase_find": ""
},
"relative_line_numbers": true,
キーマップ設定
この先のキーマップ説明のほとんどはVimモード用なので、Vimモードを使わない方は読み飛ばしていただいて構いません。
左上の三味線マークから「Open KeyMap File」を選択すると、キーマップ設定用のJSONファイルが開きます。そちらのファイルに以下の設定を貼り付けると良いと思います。
ファイルファインダー
こちらはVimモードを使わない方にもおすすめの設定です。ワークスペース内のファイルを名前で検索できます。
{
"context": "Workspace",
"bindings": {
"shift shift": "file_finder::Toggle"
}
}
インサートモードからノーマルモードへ戻るキー設定
{
"context": "Editor && vim_mode == insert",
"bindings": {
// "j k": "vim::NormalBefore"
"j j": "vim::NormalBefore"
}
}
削除時のヤンクをオフ & 検索時のハイライトを消す
{
"context": "Editor && vim_mode == normal && !menu",
"bindings": {
"x": ["workspace::SendKeystrokes", "\" _ x"],
"d" : ["workspace::SendKeystrokes", "\" _ d"],
"ctrl-l": ["workspace::SendKeystrokes", "escase : nohlsearch enter"]
}
}
ウィンドウ操作系
{
"context": "Editor && (vim_mode == normal || vim_mode == visual) && !VimWaiting && !menu",
"bindings": {
"ctrl-g h": "workspace::ActivatePaneLeft", // 左の分割ペインに移動
"ctrl-g j": "workspace::ActivatePaneDown", // 下の分割ペインに移動
"ctrl-g k": "workspace::ActivatePaneUp", // 上の分割ペインに移動
"ctrl-g l": "workspace::ActivatePaneRight", // 右の分割ペインに移動
"ctrl-g s": "pane::SplitDown", // 下に分割
"ctrl-g v": "pane::SplitRight", // 右に分割
"ctrl-w q": "pane::CloseActiveItem", // アクティブなタブを閉じる
"ctrl-w w": "workspace::Save", // ファイルを保存する
"shift-h": "pane::ActivatePreviousItem", // 前のタブに移動
"shift-l": "pane::ActivateNextItem", // 次のタブに移動
}
}
Dock操作系
Zedにおける
Dockとは、プロジェクトツリーやGitパネルなど、サイドバーに表示されるコンテンツを指します。
{
"context": "Dock",
"bindings": {
"ctrl-g h": "workspace::ActivatePaneLeft",
"ctrl-g l": "workspace::ActivatePaneRight"
}
}
おわりに
まだまだ紹介しきれていないカスタム設定もありますが、今回ご紹介した設定だけでも十分にZedエディタを使いこなせるはずです。
AIエージェント機能も統合されており、Claude CodeやCodexを利用している方には大きな恩恵があるでしょう。具体的な利用方法は、こちらのリンクで確認できます。
Zedエディタは、これからさらに注目度が高まるエディタだと感じています。ぜひこの機会に、Zedエディタを体験してみてはいかがでしょうか?
最後に、私のsettings.jsonとkeymap.jsonを公開します。
{
"edit_predictions": {
"disabled_globs": []
},
"tab_bar": {
"show": true
},
"restore_on_startup": "last_workspace",
"ssh_connections": [],
"wsl_connections": [
{
"distro_name": "",
"user": "",
"projects": [
{
"paths": [""]
}
]
}
],
"vim_mode": true,
"vim": {
"use_system_clipboard": "always"
},
"base_keymap": "VSCode",
"icon_theme": {
"mode": "dark",
"light": "Zed (Default)",
"dark": "Material Icon Theme"
},
"tabs": {
"file_icons": true,
"git_status": true
},
"ui_font_size": 16,
"buffer_font_size": 15,
"buffer_font_fallbacks": ["Noto Sans JP"],
"buffer_font_weight": 400,
"buffer_line_height": "comfortable",
"theme": {
"mode": "dark",
"light": "One Light",
"dark": "Ayu Dark"
},
"lsp": {
"biome": {
"settings": {
"require_config_file": true
}
}
},
"languages": {
"JavaScript": {
"formatter": { "language_server": { "name": "biome" } },
"code_actions_on_format": {
"source.fixAll.biome": true,
"source.organizeImports.biome": true
}
},
"TypeScript": {
"formatter": { "language_server": { "name": "biome" } },
"code_actions_on_format": {
"source.fixAll.biome": true,
"source.organizeImports.biome": true
}
},
"TSX": {
"formatter": { "language_server": { "name": "biome" } },
"code_actions_on_format": {
"source.fixAll.biome": true,
"source.organizeImports.biome": true
}
}
},
"file_types": {
"JSONC": [
"biome.json",
"tsconfig*.json",
"**/.zed/**/*.json",
"**/.vscode/**/*.json",
"*.json",
"*.jsonc"
]
}
}
[
{
"context": "Workspace",
"bindings": {
"shift shift": "file_finder::Toggle"
}
},
{
"context": "Editor && vim_mode == insert",
"bindings": {
// "j k": "vim::NormalBefore"
"j j": "vim::NormalBefore"
}
},
{
"context": "Editor && vim_mode == normal && !menu",
"bindings": {
"x": ["workspace::SendKeystrokes", "\" _ x"],
"d": ["workspace::SendKeystrokes", "\" _ d"],
"ctrl-l": ["workspace::SendKeystrokes", "escase : nohlsearch enter"]
}
},
// ウィンドウ操作(ノーマル・ビジュアルモード共通)
{
"context": "Editor && (vim_mode == normal || vim_mode == visual) && !VimWaiting && !menu",
"bindings": {
"ctrl-g h": "workspace::ActivatePaneLeft",
"ctrl-g j": "workspace::ActivatePaneDown",
"ctrl-g k": "workspace::ActivatePaneUp",
"ctrl-g l": "workspace::ActivatePaneRight",
"ctrl-g s": "pane::SplitDown",
"ctrl-g v": "pane::SplitRight",
"ctrl-w q": "pane::CloseActiveItem",
"ctrl-w w": "workspace::Save",
"shift-h": "pane::ActivatePreviousItem",
"shift-l": "pane::ActivateNextItem",
}
},
// Dock上での操作
{
"context": "Dock",
"bindings": {
"ctrl-g h": "workspace::ActivatePaneLeft",
"ctrl-g l": "workspace::ActivatePaneRight"
}
}
]