LSP¶
言語サーバー(LSP)を使って、次の機能を提供します。
| 機能 | Helix モード | VS Code モード |
|---|---|---|
| 診断 | ]d / [d で移動、Space d で一覧 |
— |
| 補完 | 自動。Ctrl+X / Ctrl+Space で手動 |
自動。Ctrl+Space で手動 |
| ホバー | K / Space k |
— |
| シグネチャヘルプ(引数の表示) | 自動。:signature で手動 |
自動。:signature で手動 |
| 定義へ移動 | gd |
F12 |
| 参照 | gr |
Shift+F12 |
| 名前の変更 | Space r |
F2 |
| コードアクション(クイックフィックス・リファクタリング) | Space . / :action |
:action |
| シンボル一覧(ファイル内) | Space s / :symbol |
:symbol |
| シンボル検索(プロジェクト全体) | Space S / :symbol-all |
:symbol-all |
| 整形 | :fmt |
:fmt |
— の操作は、コマンドパレット(F1)から実行できます。
コードアクション¶
Space .(または :action)で、カーソル位置で使えるコードアクションを一覧にします。選ぶと適用します。
- 診断のヒント(例:gopls の「Loop can be simplified using slices.Contains」)の直し方は、この一覧に出ます。
- 選択があるときは、選択した範囲のコードアクションを出します。選択がなく、カーソルが診断の範囲の外にあるときは、カーソルの行にある診断を使います。
- 変更は保存しません。確認してから
:wで保存してください。
シンボル一覧¶
Space s(または :symbol)で、開いているファイルの関数・型・変数などを一覧にします。選ぶとその行へ移動します。
- 一覧には種類(関数・型・変数など)と行番号が出ます。入れ子のシンボルは、外側の名前も一緒に出ます。
- 入力で絞り込めます。
Space S(または :symbol-all)は、プロジェクト全体からシンボルを名前で探します。
- 名前を入力すると、言語サーバーに問い合わせて一覧を作ります。入力が止まってから問い合わせます。
- 選ぶとそのファイルを開いて、定義の行へ移動します。
マウスでホバーを出す¶
エディタ上の単語にマウスを乗せて 0.5 秒止めると、その位置のホバーが出ます。カーソルは動きません。
- ポップアップはマウスの位置に出ます。ポップアップの上にマウスがある間は閉じず、ホイールでスクロールできます。
- マウスが単語(同じ単語の別の文字へ動かしても閉じません)とポップアップの外へ出る、クリックする、キーを押すと閉じます。
- エディタにフォーカスがあるときだけ開きます。ポップアップはキーを奪わず、キーを押すと閉じます。
- 言語サーバーが未起動のとき、ホバー情報がないとき、エラーのときは何も表示しません。
[editor]のmouse-hover = falseで無効にできます(設定ファイル)。無効にすると、ボタンを押さないマウス移動のイベントも受け取りません。
組み込みの設定¶
次の言語サーバーの設定を組み込んでいます。サーバーが PATH にあれば、設定なしで動きます。
| 言語 | サーバー |
|---|---|
| Go | gopls |
| Rust | rust-analyzer |
| TypeScript / JavaScript(JSX・TSX を含む) | typescript-language-server |
| Python | pylsp |
| C / C++ | clangd |
| Nix | nil |
| Haskell | haskell-language-server-wrapper |
| Lua | lua-language-server |
| Bash | bash-language-server |
| Zig | zls |
| TOML | taplo |
| YAML | yaml-language-server |
| JSON | vscode-json-language-server |
設定の書き方¶
設定は Helix と同じ languages.toml に書きます。
読み込む場所と順番は 設定ファイル にあります。
# .helix/languages.toml
[language-server.my-gopls]
command = "gopls"
args = ["serve"]
config = { gofumpt = true } # initializationOptions として送ります
environment = { GOFLAGS = "-tags=integration" }
[[language]]
name = "go"
language-servers = ["my-gopls"]
roots = ["go.mod"]
indent = { tab-width = 4, unit = "\t" }
対応しているキーは次のとおりです。
| セクション | キー |
|---|---|
[language-server.*] |
command args config environment |
[[language]] |
name language-id file-types roots language-servers indent.unit |
再起動¶
| コマンド | 動作 |
|---|---|
:lsp-restart |
言語サーバーを再起動 |
:config-reload |
設定ファイルを読み直す |
シグネチャヘルプ(引数の表示)¶
関数の ( や引数の , を打つと、関数の引数一覧をカーソルの1行上に出します。今の引数は太字です。
)かEscで消えます。カーソルが別の行に移っても消えます。- 手動では、
:signatureで出せます(挿入中でなくても使えます)。Ctrl+Shift+Spaceは端末がCtrl+Spaceと同じ信号で送るため、使えません。 - 自動で出す文字は、言語サーバーが知らせる
triggerCharactersです。知らせないときは(と,です。