ディスカッション (11件)
Ki Editorは、従来のテキストベースの編集ではなく、AST(抽象構文木)を直接操作することに焦点を当てた新しいエディタです。コードを単なる文字列としてではなく「構造」として扱うことで、より直感的で強力なコーディング体験の実現を目指しています。
俺の中のエディタの分類:
-
正統派。主に見た目と統合機能にフォーカスしてるやつ。
-
モーダル、Vimの改良版。基本的なVimのキーバインドを維持しつつ、細かい改善を加えてるやつ。
-
モーダル、Vimのアプローチを再考したやつ。
Kiは俺がずっとチェックしてるこの3番目のカテゴリーに入るね。
この「ファーストクラスの構文選択」で、JetBrains系のIDEで一番使ってるショートカットを思い出した。「選択範囲の拡大 / 縮小(Expand / Shrink Selection)」のやつ。
Ctrl + W
Ctrl + Shift + W
これのおかげで、ファイル内の「テキスト」との向き合い方がマジで変わったんだよね。
VS CodeとかZedとかにも似たような操作はあるけど、俺の経験だと拡大・縮小の粒度が粗すぎることが多いかな。
これのVS Codeインテグレーションを作ったのは俺なんだ。それ以来あんまり貢献できてなくて申し訳ないけど、本当にクールなプロジェクトだと思う。俺たちが使う基礎的なツール(エディタ、言語、ツール、OSとか)を革新しようとするのは重要だと思ってて、Kiはまさにそれをやってるよね。
試すのが待ちきれないな。キーボードレイアウトに依存しない(agnostic)のが最高。ドキュメントにある他のアイデアも良さげなのが多いね。特に、すべてを編集可能なバッファとするEmacs的な着想とか。ただ、エディタ間にはいつも大きなトレードオフがあるから、実際どうなるか見てみないとな。
例を見るまで完全には理解できてなかった。
ファーストクラスの構文修正
現在のノードと次のノードの間のコンマも一緒に削除されている点に注目。
コンマが自動的に追加される点に注目。
これ最高じゃん!しかも、こっちの方が実装に必要なロジックも少なくて済みそうだよね。面白い。
ZedにKiのインテグレーション(というか、少なくともAST優先の書き直し)を載せるのにどれくらい手間がかかるか気になるな。
AST編集に関しては、時々自分が無知な気がしてくるよ。コンピュータサイエンス的な視点でASTが何かはわかってる。でも、ASTのテキストオブジェクトを直接編集するような大規模なリファクタリングはやったことがないんだ。スキルの問題かな…。
俺が使ってるのは、(neo)vimに標準ではない引数リストや関数を操作する便利なテキストオブジェクトくらい。関数のどこかで「daf」って打てば「ただ消える」のはすごくいいよね。あとは基本的なマクロと組み合わせて、正規表現で検索して「daf」するとか。
目の前に見えてないものや、名前の変更みたいな超単純なもの以外を編集するのは、自分にはまだ難しいのかも。あるいは、正規表現で探してテキストオブジェクトで消す、みたいな自分が理屈で理解できる範囲のことしかやってないというか。
LSPについては、「定義へ移動」と「すべての参照を置換」は使ってて便利だけど、構造的な大規模リファクタリングは全然やってない。LSPの機能もその2つ以外はあんまり使ってないしな…。
要するに、もっとエディタを使いこなせるようにならないとってことだ。
何年も前に、これよりさらに「ハードコア」な、構文ツリー上で動作するエディタを作ったことがある。つまり、ツリー志向の操作しかできないやつだ。ツリーではなくプレーンテキストを入力することは不可能だから、パースの必要がない。したがって、構文的に不正なプログラムは存在し得ないんだ。
課題は、これを実用的なプログラム入力手法にすることだった。ある程度進展はあったと思うけど、実現可能性はプログラミング言語によって変わるんだよね。
想定していたディスプレイハードウェアがもう手に入らないから今は動かせないけど、ここで詳細が読めるよ:https://ucalgary.scholaris.ca/items/da8b823b-c344-4ffb-aa37-baf3f37c3fd7
相変わらずEmacsにはもうあるんだよね。
AST編集の課題は発見しやすさ(discoverability)だと思う。何を選択したいかはわかってて画面にも見えてるのに、その名前がわからないんだよね。
カーソルの周囲を色分けされたスコープで囲むプラグインを作れないか夢想してる。「次の関数」って考える代わりに「次の青いところ」って考える感じ(その時、関数が青く塗られてるとして)。
Helixのワークフローに加わった素晴らしい要素だね。「移動 -> アクション」というアプローチに何かが足りないと思ってたんだ。これで三位一体が完成するよ。