さようならVS code, Zed

ふとしたことで純Rust製の高速エディタが開発中 by zed.devというのを見て早速登録してみたもののなんの音沙汰もなし(知った時点でHacker newsで紹介されてから既に数ヶ月)。 同じようなタイミングでReddit経由でhelixというエディタを知った。 コンソール内で動くS+V形式のvi系エディタということだが(名前だけは知っていた)基になったKakouneともども色々設計方針を読み、 なんか面白そうなので使っていみたら大変気に入ってしまった。

いいところ:

というわけで、gnus, magit, diredなどEmacsが得意な非ファイル系の操作以外の、つまり基本編集に関してはとうとうhelixの方が便利かもというところまで来てしまいました。

色々

構文を認識していない

最近grammarの取り込みが選択的になったせいか、このようなことが起きるようになった。 README.mdには以下のように書いてある。

cargo install --path helix-term
hx --grammar fetch
hx --grammar build

しかし少なくともmacOSでは、

rm -fr runtime/grammar

がインストールの前に必要だった。 これはどうもデフォルトのHELIX_RUNTIMEがCARGO_HOMEから構成されていたみたい。 ~/.config/helix/runtime を作るところから始めれば問題ないかも。ということでissueを立てるような話ではなかった。

なぜかCtrl-{h,l,j,k}が空いている

もったいない。tree-sitterを使った構文単位の移動がAlt-{h,l,j,k}に割り当てられているのだけど、 AltはmacOSだと押しにくいOptionに割り当てないといけない。 なぜかCtrlをprefixにしたキーシークエンスが開いていることに気づいたので、そちらに割り当て直したら非常に便利になった。Rustで式単位、文単位での削除移動がセクションの始まりと終わりを気にせずできるようになった。

ということで現在、~/.config/helix/config.tomlでのnormal modeの設定はこんな感じ

[keys.normal]
"C-h" = "select_prev_sibling"
"C-l" = "select_next_sibling"
"C-j" = "shrink_selection"
"C-k" = "expand_selection"
"D" = "delete_char_backward"
"H" = "move_prev_word_end"
"^" = "goto_line_start"
"$" = "goto_line_end"

Solarized系テーマでは対応する括弧とカーソルとの見分けがつかない

対応する括弧のための表示修飾とカーソルのそのもののそれが同じというのはすごく嫌。 カーソルの位置とその表現がvi系と違っているため括弧とカーソルがずれているEmacsや、 対応する括弧は同じ表示修飾を使っているけどもカーソルの表現がその上に乗っているVScodeではこうならない。しょうがないのでパッチを当てた(正確には別名を割り当てた)。

diff --git a/runtime/themes/solarized_dark.toml b/runtime/themes/solarized_dark.toml
index e3d587d4..dd2013e2 100644
--- a/runtime/themes/solarized_dark.toml
+++ b/runtime/themes/solarized_dark.toml
@@ -81,7 +81,7 @@
 "ui.cursor" = {fg = "base02", bg = "cyan"}
 "ui.cursor.insert" = {fg = "base03", bg = "base3"}
 # 当前光标匹配的标点符号
-"ui.cursor.match" = {modifiers = ["reversed"]}
+"ui.cursor.match" = { fg = "base03", bg = "base00" }
 
 "warning" =  { fg = "orange", modifiers= ["bold", "underlined"] }
 "error" = { fg = "red", modifiers= ["bold", "underlined"] }
diff --git a/runtime/themes/solarized_light.toml b/runtime/themes/solarized_light.toml
index 3191add3..9c820294 100644
--- a/runtime/themes/solarized_light.toml
+++ b/runtime/themes/solarized_light.toml
@@ -81,7 +81,7 @@
 "ui.cursor" = {fg = "base02", bg = "cyan"}
 "ui.cursor.insert" = {fg = "base03", bg = "base3"}
 # 当前光标匹配的标点符号
-"ui.cursor.match" = {modifiers = ["reversed"]}
+"ui.cursor.match" = { fg = "base02", bg = "light-gray" }
 
 "warning" =  { fg = "orange", modifiers= ["bold", "underlined"] }
 "error" = { fg = "red", modifiers= ["bold", "underlined"] }

ここだけの話

vi系は移動が便利だとは思わない。選択が便利なのでは。