Neoai是一個NeoOvim插件,它將OpenAI的GPT-4的功能直接帶給您的編輯器。它可以幫助您生成代碼,重寫文本,甚至可以在代碼中獲得建議。該插件由用戶友好的界面構建,使其易於與AI進行交互並獲得所需的幫助。
注意:此插件已在早期變化,並且可能會更改。
該插件的主要動機是在Neovim編碼工作流中提供AI聊天輔助因子(例如Chatgpt)的無縫集成。目的是創建一種與您和諧相處的工具,使您可以提出問題並獲得幫助,而不會破壞您的焦點或編碼節奏。與大多數現有的插件傾向於優先考慮娛樂效率,而不是生產力,此插件強調了效率和實用性。通過促進平穩而響應的編碼體驗,它旨在提高生產率並使編碼更加愉快。
要安裝NEOAI,您可以使用您喜歡的插件管理器。例如,使用vim-plug,將以下行添加到您的init.vim
或.vimrc
,請注意,它還需要在系統上安裝的NUI依賴關係並捲曲:
Plug 'MunifTanjim/nui.nvim'
Plug 'Bryley/neoai.nvim'
然後運行:PlugInstall
安裝插件。
對於懶惰: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進行的無意購買不承擔任何責任。在使用此插件時,我建議您經常檢查您的帳戶和設置限制的使用情況,這樣您就不會花更多的錢負擔得起。
該插件引入了3種模式或與AI模型進行交互的方式。
在默認模式下,GUI使用:NeoAI
命令在側面打開,允許您與模型聊天。此操作類似於您在瀏覽器中使用的操作,但是現在,GUI在您的編輯器內部更加方便。
在提示緩衝區中,您可以在插入模式下按ENTER發送文本。此外,您可以使用控件Enter插入新線。可以在配置中更改此映射。
另請注意,該插件具有一個功能,其中模型的輸出會自動保存到g
寄存器中,並且所有代碼片段都將保存到c
寄存器中。這些可以在配置中更改。
上下文模式與普通模式相似。但是,您可以提供有關要更改的內容的其他信息。例如,如果您正在閱讀他人的代碼並需要描述其所做的內容,則可以通過視覺模式在緩衝區中突出顯示代碼。然後,您可以運行:NeoAIContext
並在提示緩衝區中鍵入“請為我說明此代碼”之類的內容。
此外,您可以突出顯示一些文本,並請求“修復本文中的標點符號和語法”,以獲得更好的文本版本。
請注意,如果您在沒有任何選擇的情況下運行命令,則將傳遞整個緩衝區。
最終模式稱為“注入模式”,通過使用:NeoAIInject
。此模式在沒有圖形用戶界面的情況下運行,使您可以快速向模型發送提示,並使所得的輸出自動插入光標下方。所有這些都可以在不打開GUI的情況下完成。此外,在註射模式內有一個子模式可以通過上下文執行。
該插件的一個功能是創建快捷方式,如下所述。該插件包括兩個內置快捷方式;第一個重新格式化的文本以提高可讀性,默認鍵綁定為<leader>as
(a for AI和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
:注射時,如果文本變長,則應該轉到新行。如果設置為零,則忽略了長度(默認值: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
:OpenAI API鍵,優先於api_key .env
。api_key.get
:檢索OpenAI API鍵的函數。有關示例實現,請參閱“設置”部分。它具有更高的優先級。mappings
:包含以下操作的表格:
select_up
:在輸入窗口中選擇輸出窗口select_down
:在輸出窗口中選擇輸入窗口該值是該動作的關鍵限製或如果沒有動作,則nil
shortcuts
:一系列快捷方式。每個快捷方式都是包含:name
:字符串。快捷方式的名稱,可以觸發:NeoaishortCutkey
:聆聽或無需快捷鍵的鍵值值。desc
string或nil。如果有的話,鑰匙扣的描述use_context
:如果應使用選擇/緩衝區的上下文。prompt
:發送提示或函數以生成要發送的提示。modes
:為“ n”設置“ n”的鍵模式的列表,用於正常,“ v”。strip_function
:使用的帶函數(可選)。 智能切換Neoai窗口。如果窗口關閉,它將打開並發送可選[提示]。如果窗口是打開和聚焦的,它將關閉,最後,如果窗口是打開但不集中的,它將聚焦窗口並發送可選[提示]。
切換Neoai窗口。如果窗口關閉,它將打開並發送可選[提示]。如果窗口打開,它將關閉。
打開NEOAI窗口並發送可選[提示]。
關閉Neoai窗戶。
Smart使用上下文切換Neoai窗口。如果窗口關閉,它將打開並發送可選[提示]。如果窗口是打開和聚焦的,它將關閉,最後,如果窗口是打開但不集中的,它將聚焦窗口並發送可選[提示]。此命令使用的上下文是視覺選擇的文本或整個緩衝區,如果沒有選擇。
用上下文打開Neoai窗口,並發送可選[提示]。此命令使用的上下文是視覺選擇的文本或整個緩衝區,如果沒有選擇。
用上下文關閉Neoai窗口。
將[提示]發送到AI,並直接將AI響應注入緩衝區,而無需打開NEOAI窗口。
將[提示]發送到AI,並直接將AI響應注入緩衝區,而無需打開NEOAI窗口。響應將被剝離除了代碼片段以外的所有內容。
通過上下文將[提示]發送到AI,並直接將AI響應注入緩衝區,而無需打開NEOAI窗口。此命令使用的上下文是視覺選擇的文本或整個緩衝區,如果沒有選擇。
通過上下文將[提示]發送到AI,並直接將AI響應注入緩衝區,而無需打開NEOAI窗口。響應將被剝離除了代碼片段以外的所有內容。此命令使用的上下文是視覺選擇的文本或整個緩衝區,如果沒有選擇。
觸發通過其名稱在配置中創建的NEOAI快捷方式,而不是鍵鍵入。
根據MIT許可獲得許可。檢查許可證文件以獲取詳細信息。