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许可获得许可。检查许可证文件以获取详细信息。