12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Helix Editor のカスタマイズ

Last updated at Posted at 2024-05-27

随時更新用

はじめに

Rust や Python などを Vim や NeoVim で書けるようにセットアップしようと思ったが、思ったより理想に近づけるには道のりが長い…。。色々言語対応するとなると余計に…。
という事で、サクッと行けるやつない??って事で、ちょくちょく見かける Rust 製エディタの Helix を触ってみる事にした。

特に言語周りに関しては、今後も使ってみて追記する。

環境

  • Windows 11 Pro 23H2
  • Helix 24.3

インストール

Windows

winget install Helix.Helix

環境設定

ユーザーコンフィグは、Windows では %APPDATA%\helix\cofnig.toml、Linux と macOS では ~/.config/helix/config.toml にあるものが認識される。
Helix では、ここまでパスを指定してファイルを開かなくても、コマンドで開けるようになっている。

:config-open

例によって dotfiles 管理する。

テーマカラー

テーマカラー自体のその場での設定は :theme <theme-name> でできるが、Helix エディタを開いたときにその任意のテーマカラーを開く

config.toml
theme = "everforest_dark"

image.png

テーマいろいろ

everforest_dark base16_transparent
image.png image.png
onedark dracula
image.png image.png

ライン番号を相対 (relative) にする

lazy.nvim のデフォルトの様に、相対でのライン番号表記に切り替える。
<number> x<number> 文選択したい場合などの「指標を絶対値から計算しながら入力」といったことよりも直感的になって良い。

config.toml
[editor]
line-number = "relative"

image.png

モードに応じたカーソルタイプの変更

インサートモードではなるべく入力位置と前後の文字関係をハッキリ見たいというのがある。
そうした場合には bar タイプのカーソルが欲しくなる。
また、範囲選択時には underline タイプのカーソルが欲しくなる。
この場合は、[editor.cursor-shape] として設定する。

config.toml
[editor.cursor-shape]
insert = "bar"
normal = "block" # デフォルトで block なので実際には指定する必要はない
select = "underline" 
タイプ イメージ
block image.png
bar image.png
underline image.png

プロジェクトレベルの環境設定

作業ディレクトリ以下に .helix フォルダを作成し、ここに config.tomllanguages.toml を配置することで、全体設定をこの階層下の設定でうわ書くことができる。

特に言語設定がプロジェクトごとに存在する場合は、こちらを共有しながら作業するといいだろう。

output6.gif

言語対応

設定の基本

Helix には、デフォルトで LSP (Language Server Protocol) が実装されている。
ただ、言語対応を設定するには各自でやる必要がある。

細かい設定は、Windows であれば %APPDATA%\helix\language.toml を作成し、そこに記述していく。
Linux/macOS は ~/.cofnig/helix/language.toml に設置する。

ここら辺は Helix のレポジトリにサンプルがあるので、それを参考にするのが良い。

これも dotfile 管理する。

サポートされている言語

Rust

まずはバイナリ版 rust-analyzer をインストールする。
色々方法があるが、rustup でもインストールできて楽なので、これを使う。
もうこれだけで Rust 用の LSP は機能する様になる。爆速!便利!

rustup component add rust-analyzer

image.png

詳細設定

細かい設定は languages.toml に書く。
まぁ、僕は Rust に関してはデフォルトに準拠で満足しているので、特に設定するものはない。

languages.toml
[[language]]
name = "rust"

その他

:run-shell-command cargo run を実行すると、Rust のデバッグ実行ができるが、出力がある場合は次の様に表示される。
この表示は <Esc> で消える。

image.png

Python

Python は、リンタとフォーマット両方で Ruff を導入する。
Ruff も Rust 製という事もあるが、かなり爆速で気に入っている。

以下はかみ砕いた状態で記述するが、要は以下のフローで設定を行う。

  1. LSP サーバーのインストール
  2. コンフィグでのフォーマッターの設定

LSP サーバー周りのインストールと設定

Python では LSP として、デフォルトでは pylsp を必要とする。

環境を確認したい場合 hx --health python で確認することが出来る。
pylsp が動作出来ない環境 (= PATH パス上に見つからない状況) だと次の様にエラーが発生する。

Configured language servers:
  ✘ pylsp: 'pylsp' not found in $PATH
Configured debug adapter: None
Configured formatter: None
Highlight queries: ✓
Textobject queries: ✓
Indent queries: ✓

vritualenv 環境の作成

Pythno の場合、まずやる事と言えば仮想環境を作る事。
デフォルトの python -m venv .venv か PDM などのツール (pdm init) を使って環境を作る。

python -m venv .venv
.venv\Script\activate

さらに必須モジュールを追加する。

pip install python-lsp-server

hx --health python で確認すると以下の結果が得られる。

Configured language servers:
  ✓ pylsp: D:\tools\scripts\python\.venv\Scripts\pylsp.exe
Configured debug adapter: None
Configured formatter: None
Highlight queries: ✓
Textobject queries: ✓
Indent queries: ✓

image.png

この時点で、自動補完やヘルプの表示などのサポートは得られる状態になる。
この自動補完等には Jedi を使っているとのこと。

image.png

LSP と 関連モジュールのインストール

Ruff のための python-lsp-ruff をインストールする。
もちろん Ruff もインストールする。

pip install ruff python-lsp-ruff

この時点で、:format コマンドでフォーマットが効くようになる。

output4.gif

python-lsp-ruff に関しては、どうやらインストール時に既に認識するように設定されている様子。
また、python-lsp-ruff を使用有効にした場合リンタとフォーマッタ両方が Ruff から供給されることになるとのこと。
何かしら挙動の設定をしたくなったら、Ruff の設定を調べるとよさそう。

また、別に autopep8 などを採用する場合は、デフォルトではオフになっている様子なので、各自で languages.toml の設定をする必要がある。
python-lsp-server + python-lsp-ruff を選択するメリットはここら辺の簡略化にもありそうだ。

詳細設定

言語設定に関しては例によって languages.toml に記述していく。

保存時のフォーマット

デフォルトでは、保存時にフォーマットをかけない設定になっているので、これを変更する。

languages.toml
[[language]]
name = "python"
auto-format = true

output5.gif

Svelte

LSP サーバーのインストール

Svelte の LSP には Svelte 公式の language-tools にある Svelte Language Server を使用する。

npm i -g svelte-language-server

hx --health svelte を実行すると以下の様になる。

Configured language servers:
  ✓ svelteserver: C:\Users\aurat\AppData\Local\Volta\bin\svelteserver.exe
Configured debug adapter: None
Configured formatter: None
Highlight queries: ✓
Textobject queries: ✘
Indent queries: ✓

この時点で、リンタや自動補完、フォーマッタなどが利用可能になっている。

image.png

output7.gif

.js.ts との統合に対応する

.js.ts にも同様に対応する場合は、次の様に tsconfig.json/jsconfig.json を編集する。

npm i -g typescript-svelte-plugin
tsconfig.json
{
    "compilerOptions": {
        "plugins": [{
            "name": "typescript-svelte-plugin"
        }]
    }
}

その他

ターミナルの活用

現状は、Vim や NeoVim の様に :term で起動できるような一体型のターミナルを作成することはできない。(結構ここに不満を持ってる人も多そう

現状はどうしようもないので、とりあえず Windows Terminal の分割機能で気を紛らわしている。

<Ctr+Alt+-> で水平分割ができるので、まずはそれで分割する。

output2.gif

さらに下のエリアにフォーカスしている時に <Shift+Alt+↓><Shift+Alt+↑> で高さを下げたり上げられる。

output3.gif

ちなみに、分割のフォーカス変更は <Alt+↑>/<Alt+↓>

最後に

あんまりカスタマイズできないからこそ迷うことがないというのもあるし、なにより動作がサクサクで速いというのがとてもいい。
プラグイン機構が今後実装されたりするようなので、そこら辺の動向を注視したい。

12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?