11 ポイント 投稿者 GN⁺ 2024-08-19 | 3件のコメント | WhatsAppで共有
  • すべての開発者はそれぞれ独自のテキストエディタ遍歴を持っており、今使っているツールにたどり着くまでの過程を経験している。こうした話は興味深く、開発ツールとそこに注がれた努力に対して大きな感謝を抱かせる
  • この記事は、開発ツールに関心のある人たちに自分の遍歴を共有し、新しいツールを試してみることを後押ししたいという思いで書かれている

テキストエディタ遍歴の始まり

  • Atomを最初に使い、HTML、CSS、Javascriptの基礎を学び始めた
  • その後VSCodeに移行したが、当時妻が写真編集のためにノートPCを使う必要があり、代わりに使ったMacBookでは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",  
	}  
}  
  • プロジェクト全体の検索はTelescopeの代替になり、マルチバッファ表示で結果を確認しながら簡単に移動できる
  • ターミナルのトグルは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でも構わない
  • 自分に最も合ったツールを選びつつ、新しいものを試すことにあまり頑なにならないでほしい

3件のコメント

 
GN⁺ 2024-08-19
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ユーザーの大半が完全に移行する可能性は低い
 
taking 2024-08-19

私も最近Helixに乗り換えました。
Hacker Newsの意見のように、既存のNeoVimではプラグインをすべて活用していなかったので、helixを試してみてすぐに乗り換えることになりました。カラーテーマは本当に衝撃的です

 
roxie 2024-08-26

デフォルトのテーマが紫っぽくていまいち、という意味でしょうか? :eyes: