O Neoai é um plug-in Neovim que traz o poder do GPT-4 do OpenAI diretamente ao seu editor. Ajuda a gerar código, reescrever o texto e até obter sugestões no contexto com seu código. O plug-in é construído com uma interface amigável, facilitando a interagem com a IA e obtenha a assistência necessária.
NOTA: Este plug -in é inicial suas mudanças iniciais e está sujeito a alterações.
A principal motivação por trás deste plug-in é fornecer uma integração perfeita de assistentes de bate-papo da IA, como o ChatGPT, no seu fluxo de trabalho de codificação Neovim. O objetivo é criar uma ferramenta que funcione em harmonia com você, permitindo fazer perguntas e receber assistência sem interromper seu foco ou ritmo de codificação. Ao contrário da maioria dos plug -ins existentes, que tendem a priorizar o entretenimento sobre a produtividade, este plug -in enfatiza a eficiência e a utilidade. Ao facilitar uma experiência de codificação suave e responsiva, ele visa melhorar a produtividade e tornar a codificação mais agradável.
Para instalar o Neoai, você pode usar seu gerenciador de plug -in favorito. Por exemplo, com o VIM-PLUG, adicione a seguinte linha ao seu init.vim
ou .vimrc
, observe que também requer a dependência e o curto do NUI instalados no sistema:
Plug 'MunifTanjim/nui.nvim'
Plug 'Bryley/neoai.nvim'
Em seguida, execute :PlugInstall
para instalar os plugins.
Para preguiçoso.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 ,
}
Para Packer:
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 ,
})
Para usar este plug -in, verifique se você possui uma chave de API do OpenAI que pode ser criada aqui. Salve esta chave em suas variáveis de ambiente como OPENAI_API_KEY
.
NOTA IMPORTANTE : Este plug -in não é responsável pelas compras não intencionais feitas para o OpenAI. Ao usar este plug -in, eu recomendaria que você verifique frequentemente o uso da sua conta e dos limites de configuração, para não gastar mais que pode pagar.
Este plug -in introduz 3 modos ou maneiras de interagir com os modelos de IA.
No modo padrão, uma GUI se abre do lado usando o comando :NeoAI
, permitindo que você converse com o modelo. Esta operação é semelhante à que você recebe ao usá -la em um navegador, mas agora é mais conveniente pela GUI estar dentro do seu editor.
No buffer de prompt, você pode enviar texto pressionando Enter enquanto estiver no modo Inserir. Além disso, você pode inserir uma nova linha usando o controle ENTER. Esse mapeamento pode ser alterado na configuração.
Observe também que o plug -in possui um recurso em que a saída do modelo é salva automaticamente no registro g
e todos os trechos de código são salvos no registro c
Estes podem ser alterados na configuração.
O modo de contexto funciona de maneira semelhante ao modo normal. No entanto, você tem a capacidade de fornecer informações adicionais sobre o que deseja alterar. Por exemplo, se você estiver lendo o código de outra pessoa e precisar de uma descrição do que ele faz, poderá destacar o código no buffer através do modo visual. Em seguida, você pode executar :NeoAIContext
e digite algo como "Por favor, explique este código para mim" no buffer de prompt.
Além disso, você pode destacar algum texto e solicitar "corrigir a pontuação e a gramática neste texto" para obter uma versão melhor do texto.
Observe que, se você executar o comando sem qualquer seleção, todo o buffer será passado.
O modo final é conhecido como "Modo de injeção" usando :NeoAIInject
. Este modo opera sem a interface gráfica do usuário, permitindo que você envie rapidamente um prompt para o modelo e tenha a saída resultante inserida automaticamente abaixo do seu cursor. Tudo isso pode ser feito sem abrir a GUI. Além disso, existe um sub-modo no modo de injeção que pode ser executado com o contexto.
Um recurso deste plug -in está criando atalhos, que são explicados abaixo. O plug-in inclui dois atalhos embutidos; O primeiro reforma selecionou o texto para melhorar a legibilidade, com a chave de chave padrão <leader>as
(a para ai e s para resumir).
O outro atalho embutido é a geração automática de mensagens Git Commit para você:
CUIDADO : Esteja ciente de que o uso excessivo desse recurso pode levar a um acúmulo de dados enviados ao modelo, o que pode resultar em altos custos. Para evitar isso, recomenda -se que os compromissos menores sejam feitos ou o recurso seja usado com menos frequência. É imperativo acompanhar seu uso, que pode ser monitorado nesse link
Para configurar o plug -in, adicione o código a seguir com valores padrão ao seu init.lua
(ou coloque na opção config
se estiver usando preguiçosamente.nvim ou packer.nvim.
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 ,
},
},
})
A função de configuração aceita uma tabela de opções para configurar o plug -in. As opções disponíveis são as seguintes:
output_popup_text
: texto do cabeçalho mostrado na janela pop -up de saída (padrão: "neoai").input_popup_text
: texto do cabeçalho mostrado na janela pop -up de entrada (padrão: "prompt").width
: Largura da janela como uma porcentagem (por exemplo, 30 = 30%, padrão: 30).output_popup_height
: altura do pop -up de saída como uma porcentagem (por exemplo, 80 = 80%, padrão: 80).submit
: Chave de ligação para enviar o prompt. Se definido, será mapeado para inserir uma nova linha. (padrão: "").models
: Uma lista de modelos a serem usados:name
: O nome do provedor de modelos (por exemplo. "OpenAI")model
: Uma string do nome do modelo a ser usada ou uma lista de nomes de modelosparams
: uma tabela de parâmetros para passar para o modelo (por exemplo, temperatura, top_p)register_output
: Uma tabela com um registro como chave e uma função que retira a saída bruta da IA e produz o que você deseja salvar nesse registro. Exemplo: register_output = {
[ " g " ] = function ( output )
return output
end ,
[ " c " ] = require ( " neoai.utils " ). extract_code_snippets ,
}
cutoff_width
: Ao injetar, se o texto se tornar mais longo que esse valor, ele deve ir para uma nova linha. Se definido como nulo, o comprimento é ignorado (padrão: 75).context_prompt
: uma função que gera o prompt a ser usado ao usar os modos de contexto. Exemplo: 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
(depreciado, use api_key.env
em vez): a variável de ambiente que contém a chave da API do OpenAI. O valor padrão é "openai_api_key".api_key.env
: A variável de ambiente que contém a chave da API do OpenAI. O valor padrão é "openai_api_key".api_key.value
: A chave da API do OpenAI, que tem precedência sobre api_key .env
.api_key.get
: uma função que recupera a chave da API OpenAI. Para um exemplo de implementação, consulte a seção de configuração. Tem a precedência mais alta. mappings
: Uma tabela que contém as seguintes ações que podem ser chaves:
select_up
: Selecione a janela de saída quando na janela de entradaselect_down
: Selecione a janela de entrada quando na janela de saída O valor é a (s) referência (s) para essas ações ou nil
se nenhuma ação
shortcuts
: uma variedade de atalhos. Cada atalho é uma tabela que contém:name
: uma string. O nome do atalho, pode desencadear usando: Neoaishortcutkey
: o valor do Keybind para ouvir ou nulo se não houver keybind para o atalho.desc
uma corda ou nulo. A descrição do keybind, se houveruse_context
: Se o contexto da seleção/buffer deverá ser usado.prompt
: o prompt a enviar ou uma função para gerar o prompt para enviar.modes
: uma lista de modos para definir o KeyBind para "N" para Normal "V" para visual.strip_function
: a função de tira a ser usada (opcional). O Smart alterna a janela Neoai. Se a janela estiver fechada, será aberta e enviará o [prompt] opcional. Se a janela estiver aberta e focada, ela fechará, finalmente, se a janela estiver aberta, mas não focada, focará a janela e enviará o [prompt] opcional.
Alterna a janela Neoai. Se a janela estiver fechada, será aberta e enviará o [prompt] opcional. Se a janela estiver aberta, ela fechará.
Abre a janela Neoai e envia o [prompt] opcional.
Fecha a janela Neoai.
O Smart alterna a janela Neoai com contexto. Se a janela estiver fechada, será aberta e enviará o [prompt] opcional. Se a janela estiver aberta e focada, ela fechará, finalmente, se a janela estiver aberta, mas não focada, focará a janela e enviará o [prompt] opcional. O contexto usado para este comando é o texto selecionado visualmente ou todo o buffer se nenhuma seleção for feita.
Abre a janela Neoai com contexto e envia o [prompt] opcional. O contexto usado para este comando é o texto selecionado visualmente ou todo o buffer se nenhuma seleção for feita.
Fecha a janela Neoai com o contexto.
Envia o [prompt] para a IA e injeta diretamente a resposta da IA no buffer sem abrir a janela Neoai.
Envia o [prompt] para a IA e injeta diretamente a resposta da IA no buffer sem abrir a janela Neoai. A resposta será despojada de tudo, exceto trechos de código.
Envia o [prompt] para a IA com contexto e injeta diretamente a resposta da IA no buffer sem abrir a janela Neoai. O contexto usado para este comando é o texto selecionado visualmente ou todo o buffer se nenhuma seleção for feita.
Envia o [prompt] para a IA com contexto e injeta diretamente a resposta da IA no buffer sem abrir a janela Neoai. A resposta será despojada de tudo, exceto trechos de código. O contexto usado para este comando é o texto selecionado visualmente ou todo o buffer se nenhuma seleção for feita.
Desencadeia um atalho de neoai criado na configuração por meio de seu nome, em vez de uma tentativa de chave.
Licenciado sob a licença do MIT. Verifique o arquivo de licença para obter detalhes.