随時更新用
はじめに
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 エディタを開いたときにその任意のテーマカラーを開く
theme = "everforest_dark"
テーマいろいろ
everforest_dark | base16_transparent |
---|---|
![]() |
![]() |
onedark | dracula |
![]() |
![]() |
ライン番号を相対 (relative
) にする
lazy.nvim のデフォルトの様に、相対でのライン番号表記に切り替える。
<number> x
で <number>
文選択したい場合などの「指標を絶対値から計算しながら入力」といったことよりも直感的になって良い。
[editor]
line-number = "relative"
モードに応じたカーソルタイプの変更
インサートモードではなるべく入力位置と前後の文字関係をハッキリ見たいというのがある。
そうした場合には bar
タイプのカーソルが欲しくなる。
また、範囲選択時には underline
タイプのカーソルが欲しくなる。
この場合は、[editor.cursor-shape]
として設定する。
[editor.cursor-shape]
insert = "bar"
normal = "block" # デフォルトで block なので実際には指定する必要はない
select = "underline"
タイプ | イメージ |
---|---|
block |
![]() |
bar |
![]() |
underline |
![]() |
プロジェクトレベルの環境設定
作業ディレクトリ以下に .helix
フォルダを作成し、ここに config.toml
や languages.toml
を配置することで、全体設定をこの階層下の設定でうわ書くことができる。
特に言語設定がプロジェクトごとに存在する場合は、こちらを共有しながら作業するといいだろう。
言語対応
設定の基本
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
詳細設定
細かい設定は languages.toml
に書く。
まぁ、僕は Rust に関してはデフォルトに準拠で満足しているので、特に設定するものはない。
[[language]]
name = "rust"
その他
:run-shell-command cargo run
を実行すると、Rust のデバッグ実行ができるが、出力がある場合は次の様に表示される。
この表示は <Esc>
で消える。
Python
Python は、リンタとフォーマット両方で Ruff を導入する。
Ruff も Rust 製という事もあるが、かなり爆速で気に入っている。
以下はかみ砕いた状態で記述するが、要は以下のフローで設定を行う。
- LSP サーバーのインストール
- コンフィグでのフォーマッターの設定
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: ✓
この時点で、自動補完やヘルプの表示などのサポートは得られる状態になる。
この自動補完等には Jedi を使っているとのこと。
LSP と 関連モジュールのインストール
Ruff のための python-lsp-ruff
をインストールする。
もちろん Ruff もインストールする。
pip install ruff python-lsp-ruff
この時点で、:format
コマンドでフォーマットが効くようになる。
python-lsp-ruff
に関しては、どうやらインストール時に既に認識するように設定されている様子。
また、python-lsp-ruff
を使用有効にした場合リンタとフォーマッタ両方が Ruff から供給されることになるとのこと。
何かしら挙動の設定をしたくなったら、Ruff の設定を調べるとよさそう。
また、別に autopep8
などを採用する場合は、デフォルトではオフになっている様子なので、各自で languages.toml
の設定をする必要がある。
python-lsp-server
+ python-lsp-ruff
を選択するメリットはここら辺の簡略化にもありそうだ。
詳細設定
言語設定に関しては例によって languages.toml
に記述していく。
保存時のフォーマット
デフォルトでは、保存時にフォーマットをかけない設定になっているので、これを変更する。
[[language]]
name = "python"
auto-format = true
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: ✓
この時点で、リンタや自動補完、フォーマッタなどが利用可能になっている。
.js
や .ts
との統合に対応する
.js
や .ts
にも同様に対応する場合は、次の様に tsconfig.json
/jsconfig.json
を編集する。
npm i -g typescript-svelte-plugin
{
"compilerOptions": {
"plugins": [{
"name": "typescript-svelte-plugin"
}]
}
}
その他
ターミナルの活用
現状は、Vim や NeoVim の様に :term
で起動できるような一体型のターミナルを作成することはできない。(結構ここに不満を持ってる人も多そう
現状はどうしようもないので、とりあえず Windows Terminal の分割機能で気を紛らわしている。
<Ctr+Alt+->
で水平分割ができるので、まずはそれで分割する。
さらに下のエリアにフォーカスしている時に <Shift+Alt+↓>
や <Shift+Alt+↑>
で高さを下げたり上げられる。
ちなみに、分割のフォーカス変更は <Alt+↑>
/<Alt+↓>
。
最後に
あんまりカスタマイズできないからこそ迷うことがないというのもあるし、なにより動作がサクサクで速いというのがとてもいい。
プラグイン機構が今後実装されたりするようなので、そこら辺の動向を注視したい。