ChatGPTをVimから利用するためのプラグイン”vim-chatgpt”を触ってみる
はじめに
Vim から ChatGTP の恩恵を受けたいと思ったので、良さそうなプラグインを探してみたところ以下のようなプラグインを見つけたので、検証を兼ねて調べてみました。
検証環境
$ uname -moi
arm64 unknown Darwin
$ nvim --version
NVIM v0.9.0-dev-3548+gaa04efcf5-dirty
Build type: Release
LuaJIT 2.1.0-beta3
Features: +acl +tui
See ":help feature-compile"
システム vimrc: "$VIM/sysinit.vim"
省略時の $VIM: "/opt/homebrew/Cellar/neovim/HEAD-aa04efc/share/nvim"
Run :checkhealth for more info
ChatGPT Vim Plugin "vim-chatgpt" とは?
OpenAI 者が提供するサービス ChatGPT の API を使って Vim 上での編集作業を効率化するためのプラグインです。
コードロジックに関する「説明」や「改善」について尋ねることができます。
プラグインを使うと、ChatGPT に説明を求めたり、レビューしてもらったり、修正してもらったコード部分をハイライトすることができます。
利用の前提条件
以下のものが必要となります。
- Python3 がサポートされた Vim 環境
- OpenAI の ChatGPT API Key
準備
OpenAI 社の以下のページから、自分の ChatGPT API Key を取得しておきます。
インストール
Vim のプラグインの方法についてはここでは割愛します。
以下のような Vim のプラグインマネージャーを導入することをおすすめします。
セットアップ
作業 PC にて、 CHAT_GTP_KEY
という名前の環境変数を用意します。
値には先のページにて取得した API Key をセットします。
$ export CHAT_GPT_KEY='your-api-key-here'
環境変数を使わず、 .vimrc
に設定を記述する方法もあります。
let g:chat_gpt_key='your-api-key-here'
let g:chat_gpt_max_tokens=2000
最後に openai
Python モジュールをインストールしておきます。pip
が使えれば簡単に導入できます。
pip install openai
ちなみに .vimrc
に設定を書かずに使用したところエラーとなりました。
そのため、 .vimrc
に let g:chat_gpt_max_tokens=4000
の設定だけは追記し、無事に動作するようになりました。
使い方
提供されているコマンドはいくつかあるが、
:Ask '<prompt>'
コマンドを実行してみたが、実行しても何も怒りません。
ざっと試してみて便利そうなのは Rewrite
コマンドと Test
コマンドでした。
:<>Rewrite '<context>'
強調表示されたコードを ChatGPT に送信し、訂正されたコードを受け取ます。
<context>
部分にオプションを指定して挙動を制御できるようですが、使い方がわからなかった。
指定しなくても動作した。
まずは Vim を開き、以下の文章を記述した。
1から10までの数値の合計を算出するシェルスクリプトを生成して
これをビジュアルモードで選択し他状態で、 '<,'>Rewrite
コマンドを実行してみます。
すると別のウィンドウが開き、以下のような内容が表示されました。
以下のように書くことができます。
\`\`\`
#!/bin/bash
sum=0
for ((i=1; i<=10; i++)); do
((sum+=i))
done
echo "1から10までの数値の合計は:$sum"
\`\`\`
このコードでは、forループを使って1から10までの数値を1つずつ加算し、最終的な合計を計算します。また、変数名をできるだけわかりやすくして、echo文を使って結果を出力しています。
優しすぎます。
個人的にはシバン部分が #!/usr/bin/env bash
となってほしかったが、変数名にまで気を使ってくれて気が利く。
もちろんこのコードをそのまま使用する必要はないので、自分の好みで以下のように変更してみました。
#!/usr/bin/env bash
set -o errexit
set -o nounset
sum=0
for ((i = 1; i <= 10; i++)); do
((sum += i))
done
echo "1から10までの数値の合計は:$sum"
:<>Test '<context>'
強調表示されたコードを ChatGPT に送信し、テストコードを受け取ます。
これは便利そう。
先ほど作成したスクリプトのテストコードを要求してみます。
ビジュアルモードですべて選択した状態で '<,'>Test
を実行します。
Sure, here's a test for the code:
#!/usr/bin/env bash
set -o errexit
set -o nounset
# Define expected sum value
expected_sum=55
# Run the code
source code.sh
# Check if the sum is correct
if [[ "$sum" -eq "$expected_sum" ]]; then
echo "Test passed!"
else
echo "Test failed. Expected sum: $expected_sum, Actual sum: $sum"
exit 1
fi
Note that this assumes the code is saved in a file called "code.sh". You can adjust the file name and expected sum value as needed.
なるほど。
ただし、すでに先程のスクリプトは sum.sh
という名前で作成してしまったのでその点だけ修正が必要です。
#!/usr/bin/env bash
set -o errexit
set -o nounset
# Define expected sum value
expected_sum=55
# Run the code
source sum.sh
# Check if the sum is correct
if [[ "$sum" -eq "$expected_sum" ]]; then
echo "Test passed!"
else
echo "Test failed. Expected sum: $expected_sum, Actual sum: $sum"
exit 1
fi
これを test.sh
というファイル名で保存し、実行してみます。
$ bash test.sh
1から10までの数値の合計は:55
Test passed!
いい感じ。
他のテストケースも要求してみたいが今日は深堀りせずここまでにします。
ひとこと
今後もっと使うことになるかわからないけれども、しばらく使ってみようと思います。
ちなみに紹介しておいてなんですが、以下のプラグインも一緒に入れていてこちらのほうがシンプルかつエラーなく動作しているのでこちらをメインに使っていこうかなと思っているところです。
ディスカッション
コメント一覧
まだ、コメントがありません