🍿

vim-lsp-settings に物色インストール画面を作った。

3 min read 1

はじめに

この記事は Vim Advent Calendar 2021、25 日目の記事です。みなさん Vim 使ってますか?そうですか、使ってますか。

今年はどうも仕事が忙しく、Vim に殆どコントリビュート出来なかったので反省している mattn です。何も Vim 活動をしていなかったのか、というとそうでもなく、主に vim-lsp-settings で色々な Language Server を使える様にしたり、改善したりしていました。

vim-lsp-settings て何よ

知らない方もおられると思うので、改めて vim-lsp-settings を説明したいと思います。

https://github.com/mattn/vim-lsp-settings

古くからあるジョークの影響か、一般的な Vim のイメージは

  • 真っ黒な画面
  • /etc のファイル編集用エディタ
  • 同期処理しかできない
  • 終了できない

といった悪いイメージがあるのですが、多くの方が想像している Vim と現実との間には、とても大きな隔たりがあります。実際の Vim は

  • どのテキストエディタよりもテキストを高速に編集できる機能を持ち合わせ
  • Visual Studio Code とほぼ同じ言語拡張機能が使え
  • 非同期に処理されヌルヌルと動く

という物だったりします。Visual Studio Code の言語拡張機能は、Language Server Protocol という、定義位置ジャンプや補完候補提供など、各言語向けのサーバとテキストエディタでやりとりする仕組みを Microsoft が仕様として纏めた物をベースに開発されており、多くのプログラミング言語向けに Language Server が提供されています。

Vim に関しても Language Server Client 用のプラグインが開発されており、その中でも筆者は vim-lsp に着目しています。理由としては

  • Vim script だけで実装されているので副作用が無い
  • Language Server Protocol の仕様に厳密に対応しようと心掛けている
  • 非同期処理ができている
  • 拡張性がある

というもの。

node や deno に依存する拡張はそれらのバージョンに依存したりバージョンをアップグレードするなどのメンテナンスが必要になります。

vim-lsp に関して言うと、拡張性と導入のしやすさは相反してしまう物で、あまり Vim をメインで使っていなかった人や、初心者の方が「Language Server 使ってみたい」という気持ちを遠ざけてしまう物になっていました。

そこで筆者は「Visual Studio Code の様に1アクションで拡張機能をインストールしたい」「できればデフォルトですぐ使える状態であってほしい」という思いから、vim-lsp を補助するプラグインを作り始めました。それが vim-lsp-settings です。

https://github.com/mattn/vim-lsp-settings

vim-lsp-settings の仕事としては以下の通り。

  • Visual Studio Code 並みに簡単にインストールできる拡張セット
  • ファイルタイプに従った Language Server の選択と起動
  • 便利なオプションのデフォルト化

サポートしている Language Server の数で言えば、Visual Studio Code よりも多かったりします。

https://github.com/mattn/vim-lsp-settings#supported-languages

なにが問題だと感じていたのか

vim-lsp-settings は以下の手順で Language Server をインストールする事ができました。

  1. ユーザがあるファイルを開く
  2. vim-lsp-settings がオススメ Language Server をサジェストしてくる
  3. ユーザがコマンド「:LspInstallServer」を実行するとインストールされる

この方法はとても良く機能していて、特に問題も無いのですが実は Visual Studio Code には言語拡張をインストールする導線が2つあるのです。

  • ファイルを開いた際のサジェスト
  • 拡張一覧からユーザが物色してインストール

vim-lsp-settings はこのうち前者しかサポートしていません。vim-lsp-settings 開発当初に、このどちらをサポートしようか数日悩んだのですが、片方だけサポートする事を選択しました。

vim-lsp-settings はコミュニティの手により育っている

vim-lsp-settings は前述の様に 87 個もの Language Server をサポートしている Vim プラグインです。僕1人で開発できる訳がありません。そのプログラミング言語に詳しい人達が、Language Server が更新された事を知り、それを vim-lsp-settings に反映して頂いています。

つまり、皆さんの多大な努力と、僕のマージボタンを押す労力で成り立っています。

こういったコミュニティドリブンのソフトウェアを開発するには、新規参入の方に対して安全でなければなりません。今思えば、それが後者の方法だったのではと感じています。

物色インストール機能を作った

vim-lsp-settings に興味を持って頂けるかどうかは、この「物色してインストールが重要だと」気付き、以下の様な画面を作りました。

この画面では、vim-lsp-settings が扱える Language Server が一覧表示され、インストールされているかいないのかが一目で分かる様になっています。

また i をタイプするとインストール(もしくは更新)、x をタイプするとアンインストール、b をタイプすると提供元 URL をブラウザで開く、? で補足情報を表示、を行う事ができます。

名前の後ろにどの言語向けに提供されるかを羅列してあるので、いろいろと物色して見てください。名前は聞いた事があり試してみたいと思っていた、といったケースで便利に動いてくれると思います。

まとめ

vim-lsp-settings に物色インストール画面を追加しました。全 Language Server の URL と補足情報を調べ上げるのに結構時間を費やしてしまいましたが、これで今後簡単にバグ情報などをたどる事ができて便利になったと思います。

Discussion

有り難く使わせて頂いております。
恐らくこのプラグインがなければ、vim-lspを使いこなせていなかったと思っています。

ログインするとコメントできます