Helix Editor23.03アップデート概要

:point_right: [Next](https://github.com/helix-editor/helix/milestone/4)
:point_right: [github](https://github.com/helix-editor/helix)
:point_right: [web](https://helix-editor.com/news/release-23-03-highlights/)

最近忙しくてよく見れておらず、いくつか見逃しがあるので適宜追加していくと思う

Helix Editorにアップデートが来た

今回も結構大きなポイントととなる機能が多くあった

PRを見ている感じとして非常に大変そうだなあと毎度ながら思いながら眺めていた

## 個人的なポイント

あくまでも私個人の注目していたPRを優先的にピックアップしているので全て見たい方は[Change Log](https://github.com/helix-editor/helix/blob/master/CHANGELOG.md#2303-2023-03-31)を参照すること

### Soft Wrap/Virtual text

今回のアップデートの一番の目玉

ソフトラップによる改行とバーチャルテキスト(インラインテキスト)が実装・改修された

このPRのためにいろんな人が貢献していてOSSの凄さを感じた

これは様々な機能向上に使われる予定で，例えばエラーメッセージの表示、Gitのdiffなどに使われるかもしれない

なのでこれができるようになるというのはこれら拡張機能の基本となるため、機能以上に役立つ

設定は以下の通り

```toml
[editor.soft-wrap]
enable = true
max-wrap = 25 # increase value to reduce forced mid-word wrapping
max-indent-retain = 0
wrap-indicator = ""  # set wrap-indicator to "" to hide it
```

| Key | Description | Default |
| --- | --- | --- |
| enable | ソフトラップを有効にするかどうか | false |
| max-wrap | 行末に残った最大空きスペース | 20 |
| max-indent-retain | 行をソフトラッピングするときに引き継がれる<br>最大のインデント| 40 |
| wrap-indicator | `ui.virtual.wrap`で強調表示されたソフトラップ行の<br>前に挿入されるテキスト | "↪" |

#### max-wrap

英語も翻訳したのでもmax-wrapの機能がいまいちわからない

0と20で設定したのを比較したのを下に載せる

感じとしては文字毎に区切るか単語で区切るかがどうかな感じなのだが，説明と違う気がするのでやっぱりわからない

- max-wrap = 0

![wrap-max-0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2630694/a9efeba4-866a-eab7-ea8c-83db31546519.png)

- max-wrap = 20

![max-wrap-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2630694/9b98846b-8e1d-d24f-86d8-e417e9ff471b.png)


#### max-indent-retain

これは便利な設定だと思う

ソフトラップされて改行になったときに，その改行にインデントを入れるかどうか

- max-indent-retain = 0

![indent_zero.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2630694/d7bbe494-4f0d-0e2f-7494-2e83d6d80dae.png)

- max-indent-retain = 20

`finish()`の位置が20個分のスペースでインデントされるようになる

`:Rsult {`が4個分の改行になっている理由はよくわかっていない

![indent_twenty.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2630694/150aebf8-59e1-146d-c1f2-a989244c366e.png)

### Virtual text

今までの改行の文字や空白といった箇所に使われていたバーチャル文字の改修が行われた

- TODO: 調査が必要

わりと前なので定かではないが，このバーチャル文字自体に改行をできない問題があったのとレンダリングコストが高いせいだった気がする

- wrap-indicator

先ほどのソフトラップで改行された箇所に`↪`が追加される

上記のだと`""`で表示しないようになっている

![virtual_indent.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2630694/c1c14b3a-85b2-e324-b96f-d15242e3cb3f.png)

### Inlay Hints

個人的にめちゃくちゃ待ち望んていた機能の一つ

静的型付け言語はLSPが型を表示してくれる

それをバーチャルテキストを使って、コードの内部に入れ込むようになっている

![スクリーンショット 2023-03-31 220123.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2630694/d49d4569-e686-6619-65b6-3a37d259b21b.png)

これが出てきてくれたおかげでかなり、Rustのような型が厳密な言語を扱いやすくなった

### LSP Snippets

これは地味に便利になった機能の一つ

LSPでの補完がより複雑なコマンドを使えるようになった

これはまだ初期段階の実装になっており将来的には変数補完とかのためにある感じ

まだまだ、改善改良の余地がある箇所になっている

### Dynamic workspace symobol picker

もともとあったシンボルピッカーの改良した機能

このシンボルピッカーはLSPの機能なのだが、もともとのLSPの制限なのかHelixの制限なのか大きなプロジェクトやフレームワークではシンボルが多すぎて検索に時間がかかったりしていた

これによって動的に更新されるため、きちんと複数のシンボルがすぐに検索できるようになった

地味に早く検索できるようになっていたので不満点が減った

## 終わりに

前回はテーマの修正などが多かったが、今回は改良・改善のための基礎工事にあたる機能がたくさん実装された

そのため、今回は入らなかったが次回までにたくさんの機能の向上が見込める部分がたくさんあるので待ち遠しい

そろそろ本腰をいれてサブからメインエディタとして使っていこうとしているが...

これを使いこなすにはターミナルのアプリも、もう少し頑張って手入れが必要だなと思いつつ...

VSCodeから逃れられない

なにより、Pythonとの親和性もVSCodeは高いのでいかんともしがたい

`config.toml`の更新された箇所

```toml
[editor.statusline]
left = ["mode", "spinner"]
center = ["file-name"]
right = ["version-control", "diagnostics", "selections", "position", "file-encoding", "file-type"]
separator = "|"

[editor.soft-wrap]
enable = true
max-wrap = 25 # increase value to reduce forced mid-word wrapping
max-indent-retain = 0

[editor.lsp]
display-inlay-hints = true
```

## 将来的に修正・改良される予定の注目機能

### Command expansions

https://github.com/helix-editor/helix/pull/3393

かなりすごい機能の一つ

今までコマンドを実行するとき，エディタで開いているファイル名，特定の行や列といった情報を取得することができなかった

これによりそれら情報を取得することができるので，今までよりも`:sh command`による表現力を向上させることができるようになる

Key DiscussionやDiscussionでよく見かける「xxの機能はありますか?」に対して`[":sh command" , "command", ...]`みたいなキーマッピングが解決方法としてしばしば提示されていた

これら特定の解決方法だったのが、より汎用的なコマンドとして扱えるようになる

多分これができてからDiscussionとかを眺めればかなり良いキーマッピングが得られると思う

### Rainbow tree-sitter matches

https://github.com/helix-editor/helix/pull/2857

括弧が虹色に色付けされる

個人的にVSCodeで使っているので欲しい機能の一つ

### Multiple Language servers per language

https://github.com/helix-editor/helix/pull/2507

現在は一つのLSPサーバーしか使えないので、これが実装されると複数のLSPが扱えるようになる

これによりweb系などのフレームワークで複数のLSPサーバーが必要な時に複数のLSPが扱えるようになる

---

などなど

すでにいくつかの記事で書いたPRも後々マージされるかもしれない

Helix Editorの今後に期待