はろー、バクダンくんだよ。
この記事はVim Advent Calendar 2021の23日目の記事だよ。
コピロット
GitHub Copilot(以下、コピロット1)はGitHubが開発中のAIプログラミング支援システムです。ソースコードのコンテキストを理解し、ちょこちょこっと関数の說明コメントを書くだけで関数まるごとサジェストしてくれちゃったりするんだとかで、気になっている人も多いと思います。
初めはほぼVSCodeでしか使えませんでしたが、今はIntelliJ IDEAでも使える他、VimやNeovimでもcopilot.vimというプラグインを介して使えるようになっています。
このことを紹介している記事がそういえばQiitaに無いようなので、今日の記事としましょ。
注意
とても便利に見えるコピロットですが、今はまだテクニカルプレビューの段階です。ここに書いてあることが今も通用するとは限りません。
また、間違いや脆弱性を含むコードがサジェストされたり、学習に使われたGPLのコードがサジェストに紛れ込むのではないかといった懸念もあります。
利用は自己責任で、参考のために試用するに留めるようにしましょう。
copilot.vim
copilot.vimは、vim-fugitiveやvim-surroundで有名なアノTim Pope氏がGitHub公式で開発中のNeovimプラグインです。Node.jsでGitHubと通信し、Neovim上にサジェストしてくれます。
こちらのプラグイン、READMEには "it requires Neovim 0.6" と書いてありますが、実はそれ以前のNeovimやVimでも一応使うことができます。
ただし、Neovim 0.6のvirtual lines機能(↑のようにバッファの行間にテキストを表示する機能)が無いので、代わりにプレビューウィンドウにサジェストを表示する形になります。
なんにせよNode.jsは必要なのでインストールしておいてください。
セットアップ
あなたのお好きな方法でcopilot.vimをVim/Neovimプラグインとしてインストールしましょう。インストールしたら、Vim/Neovimを起動して :Copilot setup
コマンドを実行します。すると8桁のコードが表示され、ブラウザが開いてコードの入力を求められるので、コードを入力してcopilot.vimをGitHubアカウントと連携すれば準備OKです。
使い方
Neovim 0.6以降の場合は、適当なファイルを開いて編集を始めれば勝手にコピロットがサジェストしてくれるので、Tabキーで確定できます。
Vimやバージョン0.6未満のNeovimの場合は、適当なファイルを開いたら :Copilot split
コマンド2を実行しましょう。すると、サジェストを表示するためのプレビューウィンドウが開きます。
その状態でインサートモードに入って編集を始めると、プレビューウィンドウにサジェストが表示されるので、Tabキーを押すとサジェストされていたコードが入力されるハズです。
コーディングのお供にしたり、コピロットとお話したりして楽しみましょう。
注意点として、今のところMarkdownやYAMLなど一部のファイルタイプではデフォルトでサジェストが無効化されています。有効化したい場合はそのバッファで:let b:copilot_enabled = 1
したり、辞書 g:copilot_filetypes
にキーを追加したりすれば有効化できるようです。
ちなみに
僕は拾った杖を振り上げたところVimのバッファが割れたので、そこにコピロットを通してNeovimと遜色ない表示をさせています。そのうち詳しく書くかもかも。