Neoai est un plugin Neovim qui apporte la puissance du GPT-4 d'Openai directement à votre éditeur. Il vous aide à générer du code, à réécrire du texte et même à obtenir des suggestions dans le contexte avec votre code. Le plugin est construit avec une interface conviviale, ce qui facilite l'interaction avec l'IA et obtient l'aide dont vous avez besoin.
Remarque: Ce plugin est en début de modifications précoces et est susceptible de changer.
La principale motivation derrière ce plugin est de fournir une intégration transparente des assistants de chat IA, comme Chatgpt, dans votre flux de travail de codage Neovim. L'objectif est de créer un outil qui fonctionne en harmonie avec vous, vous permettant de poser des questions et de recevoir de l'aide sans perturber votre concentration ou votre rythme de codage. Contrairement à la plupart des plugins existants, qui ont tendance à prioriser le divertissement sur la productivité, ce plugin met l'accent sur l'efficacité et l'utilité. En facilitant une expérience de codage fluide et réactive, il vise à améliorer la productivité et à rendre le codage plus agréable.
Pour installer Neoai, vous pouvez utiliser votre gestionnaire de plugin préféré. Par exemple, avec Vim-Plug, ajoutez la ligne suivante à votre init.vim ou .vimrc , notez qu'il nécessite également la dépendance NUI et la couronne installée sur le système:
Plug 'MunifTanjim/nui.nvim'
Plug 'Bryley/neoai.nvim'
Ensuite, exécutez :PlugInstall pour installer les plugins.
Pour paresseux.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 ,
}Pour 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 ,
})
Pour utiliser ce plugin, assurez-vous d'avoir une touche API OpenAI qui peut être créée ici. Enregistrez cette clé dans vos variables d'environnement sous le nom OPENAI_API_KEY .
Remarque importante : Ce plugin n'est pas responsable des achats involontaires effectués à Openai. Lors de l'utilisation de ce plugin, je vous recommande fréquemment de vérifier l'utilisation de votre compte et de vos limites de configuration, afin de ne pas dépenser plus que vous pouvez vous permettre.
Ce plugin présente 3 modes ou moyens d'interagir avec les modèles d'IA.
Dans le mode par défaut, une interface graphique s'ouvre sur le côté à l'aide de la commande :NeoAI , vous permettant de discuter avec le modèle. Cette opération est similaire à ce que vous obtenez lorsque vous l'utilisez dans un navigateur, mais maintenant il est plus pratique par l'interface graphique à l'intérieur de votre éditeur.

Dans le tampon d'invite, vous pouvez envoyer du texte en appuyant sur Entrée en mode insertion. De plus, vous pouvez insérer une nouvelle ligne à l'aide de Control Entrée. Ce mappage peut être modifié dans la configuration.
Notez également que le plugin a une fonction où la sortie du modèle est automatiquement enregistrée dans le registre g et tous les extraits de code sont enregistrés dans le registre c Ceux-ci peuvent être modifiés dans la configuration.
Le mode contexte fonctionne de manière similaire au mode normal. Cependant, vous avez la possibilité de fournir des informations supplémentaires sur ce que vous souhaitez changer. Par exemple, si vous lisez le code de quelqu'un d'autre et avez besoin d'une description de ce qu'il fait, vous pouvez mettre en surbrillance le code dans le tampon via le mode visuel. Ensuite, vous pouvez exécuter :NeoAIContext et taper quelque chose comme "Veuillez expliquer ce code pour moi" dans le tampon invite.

De plus, vous pouvez mettre en évidence un texte et demander "Correction de la ponctuation et de la grammaire dans ce texte" pour obtenir une meilleure version du texte.
Notez que si vous exécutez la commande sans aucune sélection, tout le tampon est passé.
Le mode final est connu sous le nom de "mode injecte" en utilisant :NeoAIInject . Ce mode fonctionne sans l'interface utilisateur graphique, vous permettant d'envoyer rapidement une invite au modèle et de faire insérer automatiquement la sortie résultante sous votre curseur. Tout cela peut être fait sans ouvrir l'interface graphique. De plus, il existe un sous-mode dans le mode Inject qui peut être exécuté avec le contexte.

Une caractéristique de ce plugin consiste à créer des raccourcis, qui sont expliqués ci-dessous. Le plugin comprend deux raccourcis intégrés; Le premier reformates a sélectionné le texte pour améliorer la lisibilité, la clé par défaut est <leader>as (A pour l'IA et S pour résumer).

L'autre raccourci intégré est des messages Git Commit pour vous:

ATTENTION : Sachez que la surutilisation de cette fonctionnalité peut entraîner une accumulation de données envoyées au modèle, ce qui peut entraîner des coûts élevés. Pour éviter cela, il est recommandé de faire des engins plus petits ou que la fonction soit utilisée moins fréquemment. Il est impératif de garder une trace de votre utilisation, qui peut être surveillée via ce lien
Pour configurer le plugin, ajoutez le code suivant avec des valeurs par défaut à votre init.lua (ou placez sous l'option config si vous utilisez Lazy.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 ,
},
},
})La fonction de configuration accepte une table d'options pour configurer le plugin. Les options disponibles sont les suivantes:
output_popup_text : Texte d'en-tête affiché dans la fenêtre de sortie de sortie (par défaut: "Neoai").input_popup_text : Texte d'en-tête affiché dans la fenêtre de fenêtre d'entrée (par défaut: "invite").width : Largeur de la fenêtre en pourcentage (par exemple, 30 = 30%, par défaut: 30).output_popup_height : hauteur de la popup de sortie en pourcentage (par exemple, 80 = 80%, par défaut: 80).submit : la liaison clé pour soumettre l'invite. Si réglé sur, sera mappé pour insérer une nouvelle ligne. (défaut: "").models : une liste de modèles à utiliser:name : le nom du fournisseur de modèles (par exemple. "Openai")model : soit une chaîne du nom du modèle à utiliser ou une liste de noms de modèleparams : un tableau des paramètres à passer dans le modèle (par exemple, la température, top_p)register_output : une table avec un registre en tant que clé et une fonction qui prend la sortie brute de l'IA et publie ce que vous souhaitez enregistrer dans ce registre. Exemple: register_output = {
[ " g " ] = function ( output )
return output
end ,
[ " c " ] = require ( " neoai.utils " ). extract_code_snippets ,
}cutoff_width : Lors de l'injection, si le texte devient plus long que cette valeur, il devrait aller sur une nouvelle ligne. S'il est défini sur nil, la longueur est ignorée (par défaut: 75).context_prompt : une fonction qui génère l'invite à utiliser lors de l'utilisation des modes de contexte. Exemple: 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
endopen_api_key_env (DÉMANDÉ, Utilisez api_key.env à la place): la variable d'environnement contenant la clé API OpenAI. La valeur par défaut est "openai_api_key".api_key.env : la variable d'environnement contenant la clé API OpenAI. La valeur par défaut est "openai_api_key".api_key.value : la clé de l'API OpenAI, qui a priorité sur api_key .env .api_key.get : une fonction qui récupère la touche API OpenAI. Pour un exemple d'implémentation, reportez-vous à la section de configuration. Il a la priorité plus élevée. mappings : un tableau contenant les actions suivantes qui peuvent être des clés:
select_up : sélectionne la fenêtre de sortie lors de la fenêtre d'entréeselect_down : sélectionne la fenêtre d'entrée en cas de fenêtre de sortie La valeur est la (s) binding (s) pour ces actions ou nil si aucune action
shortcuts : un tableau de raccourcis. Chaque raccourci est un tableau contenant:name : une chaîne. Le nom du raccourci, peut déclencher en utilisant: Neoaishortcutkey : la valeur KeyBind à écouter ou nul si pas de clé de clé pour le raccourci.desc une chaîne ou nil. La description de la clés le cas échéantuse_context : si le contexte de la sélection / tampon doit être utilisé.prompt : l'invite à envoyer ou une fonction pour générer l'invite à envoyer.modes : une liste de modes pour définir le KeyBind pour "n" pour normal, "V" pour visuel.strip_function : la fonction de bande à utiliser (facultative). Smart bascule la fenêtre NEOAI. Si la fenêtre est fermée, elle s'ouvrira et enverra l'invite en option. Si la fenêtre est ouverte et concentrée, elle se fermera, enfin, si la fenêtre est ouverte mais non focalisée, elle concentrera la fenêtre et enverra l'invite en option.
Bascule la fenêtre NEOAI. Si la fenêtre est fermée, elle s'ouvrira et enverra l'invite en option. Si la fenêtre est ouverte, elle se fermera.
Ouvre la fenêtre NEOAI et envoie l'invite en option.
Ferme la fenêtre NEOAI.
Smart bascule la fenêtre NEOAI avec le contexte. Si la fenêtre est fermée, elle s'ouvrira et enverra l'invite en option. Si la fenêtre est ouverte et concentrée, elle se fermera, enfin, si la fenêtre est ouverte mais non focalisée, elle concentrera la fenêtre et enverra l'invite en option. Le contexte utilisé pour cette commande est le texte sélectionné visuellement ou l'ensemble du tampon si aucune sélection n'est effectuée.
Ouvre la fenêtre NEOAI avec le contexte et envoie l'invite facultative. Le contexte utilisé pour cette commande est le texte sélectionné visuellement ou l'ensemble du tampon si aucune sélection n'est effectuée.
Ferme la fenêtre NEOAI avec le contexte.
Envoie l'invite à l'IA et injecte directement la réponse AI dans le tampon sans ouvrir la fenêtre NEOAI.
Envoie l'invite à l'IA et injecte directement la réponse AI dans le tampon sans ouvrir la fenêtre NEOAI. La réponse sera dépouillée de tout sauf des extraits de code.
Envoie l'invite à l'IA avec un contexte et injecte directement la réponse AI dans le tampon sans ouvrir la fenêtre NEOAI. Le contexte utilisé pour cette commande est le texte sélectionné visuellement ou l'ensemble du tampon si aucune sélection n'est effectuée.
Envoie l'invite à l'IA avec un contexte et injecte directement la réponse AI dans le tampon sans ouvrir la fenêtre NEOAI. La réponse sera dépouillée de tout sauf des extraits de code. Le contexte utilisé pour cette commande est le texte sélectionné visuellement ou l'ensemble du tampon si aucune sélection n'est effectuée.
Déclenche un raccourci NEOAI qui est créé dans la configuration via son nom au lieu d'une clés.
Licencié sous la licence du MIT. Vérifiez le fichier de licence pour plus de détails.