Neoaiは、OpenaiのGPT-4の力を編集者に直接もたらすNeovimプラグインです。コードを生成し、テキストを書き直し、コードでコンテキスト内で提案を取得するのに役立ちます。プラグインはユーザーフレンドリーなインターフェイスで構築されているため、AIと簡単に対話して必要な支援を受けやすくなります。
注:このプラグインは早期に変更され、早期に変更されており、変更される場合があります。
このプラグインの背後にある主な動機は、ChatGptのようなAIチャットアシスタントのNEOVIMコーディングワークフローにシームレスな統合を提供することです。目標は、あなたと調和して動作するツールを作成し、フォーカスやコーディングリズムを混乱させることなく、質問をして支援を受けることができるようにすることです。生産性よりもエンターテインメントに優先順位を付ける傾向があるほとんどの既存のプラグインとは異なり、このプラグインは効率と有用性を強調しています。スムーズで応答性の高いコーディングエクスペリエンスを促進することにより、生産性を向上させ、コーディングをより楽しくすることを目指しています。
Neoaiをインストールするには、お気に入りのプラグインマネージャーを使用できます。たとえば、VIM-Plugを使用して、 init.vim
または.vimrc
に次の行を追加し、システムにインストールされているNUIの依存関係とカールも必要であることに注意してください。
Plug 'MunifTanjim/nui.nvim'
Plug 'Bryley/neoai.nvim'
次に:PlugInstall
を実行して、プラグインをインストールします。
lazy.nvimの場合:
return {
" Bryley/neoai.nvim " ,
dependencies = {
" MunifTanjim/nui.nvim " ,
},
cmd = {
" NeoAI " ,
" NeoAIOpen " ,
" NeoAIClose " ,
" NeoAIToggle " ,
" NeoAIContext " ,
" NeoAIContextOpen " ,
" NeoAIContextClose " ,
" NeoAIInject " ,
" NeoAIInjectCode " ,
" NeoAIInjectContext " ,
" NeoAIInjectContextCode " ,
},
keys = {
{ " <leader>as " , desc = " summarize text " },
{ " <leader>ag " , desc = " generate git message " },
},
config = function ()
require ( " neoai " ). setup ({
-- Options go here
})
end ,
}
パッカーの場合:
use ({
" Bryley/neoai.nvim " ,
require = { " MunifTanjim/nui.nvim " },
cmd = {
" NeoAI " ,
" NeoAIOpen " ,
" NeoAIClose " ,
" NeoAIToggle " ,
" NeoAIContext " ,
" NeoAIContextOpen " ,
" NeoAIContextClose " ,
" NeoAIInject " ,
" NeoAIInjectCode " ,
" NeoAIInjectContext " ,
" NeoAIInjectContextCode " ,
},
config = function ()
require ( " neoai " ). setup ({
-- Options go here
})
end ,
})
このプラグインを使用するには、ここで作成できるOpenAI APIキーがあることを確認してください。このキーをOPENAI_API_KEY
として環境変数に保存します。
重要な注意:このプラグインは、OpenAIに対して行われた意図しない購入について責任を負いません。このプラグインを使用している間、アカウントの使用とセットアップ制限を頻繁に確認することをお勧めします。
このプラグインは、AIモデルと対話する3つのモードまたは方法を紹介します。
デフォルトモードでは、GUIが:NeoAI
コマンドを使用して側面に開き、モデルとチャットできます。この操作は、ブラウザで使用するときに得られるものに似ていますが、今ではGUIが編集者の内側にあることでより便利になりました。
プロンプトバッファーでは、挿入モード中にEnterを押してテキストを送信できます。さらに、Control Enterを使用して新しいラインを挿入できます。このマッピングは、構成で変更できます。
また、プラグインには、モデルからの出力が自動的にg
レジスタに保存され、すべてのコードスニペットがc
レジスタに保存される機能があることに注意してください。これらは構成で変更できます。
コンテキストモードは、通常モードと同様に機能します。ただし、変更したいものに関する追加情報を提供する機能があります。たとえば、他の誰かのコードを読んでいて、それが何をするかの説明が必要な場合は、視覚モードを介してバッファーのコードを強調表示できます。次に、 :NeoAIContext
実行して、プロンプトバッファで「このコードを説明してください」のようなものを入力できます。
さらに、いくつかのテキストを強調表示し、「このテキストの句読点と文法を修正して」とテキストのより良いバージョンを取得することを要求できます。
選択せずにコマンドを実行すると、バッファー全体が渡されることに注意してください。
最終モードは:NeoAIInject
を使用して「噴射モード」と呼ばれます。このモードは、グラフィカルユーザーインターフェイスなしで動作し、モデルにプロンプトをすばやく送信し、結果の出力をカーソルの下に自動的に挿入できます。これらはすべて、GUIを開くことなく実行できます。さらに、コンテキストで実行できるサブモードが注入モード内にあります。
このプラグインの特徴の1つは、以下で説明するショートカットを作成することです。プラグインには、2つの組み込みショートカットが含まれています。最初の1つは、読みやすさを向上させるために選択したテキストを再フォーマットし、デフォルトのキーバインは<leader>as
(aiの場合はaiおよびsのためのs)です。
他の内蔵ショートカットは、あなたのためのGitコミットメッセージを自動生成することです:
注意:この機能を過剰に使用すると、モデルに送信されたデータが蓄積され、高コストが発生する可能性があることに注意してください。これを避けるために、少数のコミットを行うか、機能を頻繁に使用することをお勧めします。このリンクを介して監視できる使用法を追跡することが不可欠です
プラグインをセットアップするには、 init.lua
にデフォルト値を持つコードを次のコードを追加します(または、lazy.nvimまたはpacker.nvimを使用する場合は、 config
オプションの下に置きます。
require ( " neoai " ). setup ({
-- Below are the default options, feel free to override what you would like changed
ui = {
output_popup_text = " NeoAI " ,
input_popup_text = " Prompt " ,
width = 30 , -- As percentage eg. 30%
output_popup_height = 80 , -- As percentage eg. 80%
submit = " <Enter> " , -- Key binding to submit the prompt
},
models = {
{
name = " openai " ,
model = " gpt-3.5-turbo " ,
params = nil ,
},
},
register_output = {
[ " g " ] = function ( output )
return output
end ,
[ " c " ] = require ( " neoai.utils " ). extract_code_snippets ,
},
inject = {
cutoff_width = 75 ,
},
prompts = {
context_prompt = function ( context )
return " Hey, I'd like to provide some context for future "
.. " messages. Here is the code/text that I want to refer "
.. " to in our upcoming conversations: nn "
.. context
end ,
},
mappings = {
[ " select_up " ] = " <C-k> " ,
[ " select_down " ] = " <C-j> " ,
},
open_ai = {
api_key = {
env = " OPENAI_API_KEY " ,
value = nil ,
-- `get` is is a function that retrieves an API key, can be used to override the default method.
-- get = function() ... end
-- Here is some code for a function that retrieves an API key. You can use it with
-- the Linux 'pass' application.
-- get = function()
-- local key = vim.fn.system("pass show openai/mytestkey")
-- key = string.gsub(key, "n", "")
-- return key
-- end,
},
},
shortcuts = {
{
name = " textify " ,
key = " <leader>as " ,
desc = " fix text with AI " ,
use_context = true ,
prompt = [[
Please rewrite the text to make it more readable, clear,
concise, and fix any grammatical, punctuation, or spelling
errors
]] ,
modes = { " v " },
strip_function = nil ,
},
{
name = " gitcommit " ,
key = " <leader>ag " ,
desc = " generate git commit message " ,
use_context = false ,
prompt = function ()
return [[
Using the following git diff generate a consise and
clear git commit message, with a short title summary
that is 75 characters or less:
]] .. vim . fn . system ( " git diff --cached " )
end ,
modes = { " n " },
strip_function = nil ,
},
},
})
セットアップ関数は、プラグインを構成するオプションのテーブルを受け入れます。利用可能なオプションは次のとおりです。
output_popup_text
:出力ポップアップウィンドウに表示されているヘッダーテキスト(デフォルト: "neoai")。input_popup_text
:入力ポップアップウィンドウに表示されているヘッダーテキスト(デフォルト: "プロンプト")。width
:ウィンドウの幅はパーセンテージとして(例えば、30 = 30%、デフォルト:30)。output_popup_height
:出力ポップアップの高さはパーセンテージ(例えば、80 = 80%、デフォルト:80)。submit
:キーバインディングはプロンプトを送信します。設定されている場合は、新しいラインを挿入するためにマッピングされます。 (デフォルト: "")。models
:使用するモデルのリスト:name
:モデルプロバイダーの名前(例: "Openai"))model
:使用するモデル名の文字列またはモデル名のリストparams
:モデルに渡すパラメーターの表(例:温度、TOP_P)register_output
:キーとしてレジスタを備えたテーブルと、AIから生の出力を取得し、そのレジスタに保存するものを出力する機能。例: register_output = {
[ " g " ] = function ( output )
return output
end ,
[ " c " ] = require ( " neoai.utils " ). extract_code_snippets ,
}
cutoff_width
:注入すると、テキストがこの値よりも長くなる場合、新しい行に移動する必要があります。 nilに設定すると、長さは無視されます(デフォルト:75)。context_prompt
:コンテキストモードを使用するときに使用するプロンプトを生成する関数。例: context_prompt = function ( context )
return " Hi ChatGPT, I'd like to provide some context for future "
.. " messages. Here is the code/text that I want to refer "
.. " to in our upcoming conversations: nn "
.. context
end
open_api_key_env
(非推奨、代わりにapi_key.env
を使用):openai APIキーを含む環境変数。デフォルト値は「openai_api_key」です。api_key.env
:OpenAI APIキーを含む環境変数。デフォルト値は「openai_api_key」です。api_key.value
: api_key .env
よりも優先されるOpenai APIキー。api_key.get
:OpenAI APIキーを取得する関数。実装の例については、セットアップセクションを参照してください。それはより高い優先順位を持っています。mappings
:キーになる可能性のある次のアクションを含むテーブル:
select_up
:入力ウィンドウ内で出力ウィンドウを選択しますselect_down
:出力ウィンドウ内で入力ウィンドウを選択します値は、そのアクションのキーバインディング(s)またはアクションがない場合はnil
shortcuts
:ショートカットの配列。各ショートカットは、次のテーブルです。name
:文字列。ショートカットの名前は、以下を使用してトリガーできますkey
:ショートカットのkeybindがない場合は、聞くためのキーバインド値、またはnil。desc
またはnil。 keybindの説明がある場合use_context
:選択/バッファーのコンテキストを使用する必要がある場合。prompt
:送信するプロンプトまたは送信プロンプトを生成する関数。modes
:keybindを[n]の「n」のキーバインドアップ、visual for visualのv "のリスト。strip_function
:使用するストリップ関数(オプション)。 スマートはNeoaiウィンドウを切り替えます。ウィンドウが閉じている場合、オプション[プロンプト]を開き、[プロンプト]を送信します。ウィンドウが開いて焦点が合っている場合、最終的には窓が開いているが焦点が合っていない場合、ウィンドウに焦点を合わせてオプション[プロンプト]を送信します。
Neoaiウィンドウを切り替えます。ウィンドウが閉じている場合、オプション[プロンプト]を開き、[プロンプト]を送信します。ウィンドウが開いている場合、閉じます。
Neoaiウィンドウを開き、オプション[プロンプト]を送信します。
Neoaiウィンドウを閉じます。
スマートは、Neoaiウィンドウをコンテキストで切り替えます。ウィンドウが閉じている場合、オプション[プロンプト]を開き、[プロンプト]を送信します。ウィンドウが開いて焦点が合っている場合、最終的には窓が開いているが焦点が合っていない場合、ウィンドウに焦点を合わせてオプション[プロンプト]を送信します。このコマンドに使用されるコンテキストは、選択が行われない場合、視覚的に選択されたテキストまたはバッファー全体です。
Neoaiウィンドウをコンテキストで開き、オプション[プロンプト]を送信します。このコマンドに使用されるコンテキストは、選択が行われない場合、視覚的に選択されたテキストまたはバッファー全体です。
Neoaiウィンドウをコンテキストで閉じます。
[プロンプト]をAIに送信し、NeoAIウィンドウを開かずにAI応答をバッファーに直接注入します。
[プロンプト]をAIに送信し、NeoAIウィンドウを開かずにAI応答をバッファーに直接注入します。応答には、コードスニペット以外のすべてが剥奪されます。
[プロンプト]をコンテキストでAIに送信し、NeoaIウィンドウを開かずにAI応答をバッファーに直接注入します。このコマンドに使用されるコンテキストは、選択が行われない場合、視覚的に選択されたテキストまたはバッファー全体です。
[プロンプト]をコンテキストでAIに送信し、NeoaIウィンドウを開かずにAI応答をバッファーに直接注入します。応答には、コードスニペット以外のすべてが剥奪されます。このコマンドに使用されるコンテキストは、選択が行われない場合、視覚的に選択されたテキストまたはバッファー全体です。
キーバインディングの代わりに、その名前を介して構成で作成されるNeoaiショートカットをトリガーします。
MITライセンスに基づいてライセンスされています。詳細については、ライセンスファイルを確認してください。