ChatGPT est un plugin Neovim qui vous permet d'utiliser sans effort l'API Openai Chatgpt, vous permettant de générer des réponses en langage naturel à partir de Chatgpt d'Openai directement au sein de l'éditeur en réponse à vos demandes.

Q&R interactive : s'engager dans des séances interactives de questions et réponses avec le puissant modèle GPT (ChatGPT) à l'aide d'une interface intuitive.
Conversations basées sur Persona : explorez diverses perspectives et disposez de conversations avec différentes personnages en sélectionnant des invites à partir d'invites impressionnantes de chatppt.
Assistance d'édition de code : améliorez votre expérience de codage avec une fenêtre d'édition interactive alimentée par le modèle GPT, offrant des instructions adaptées aux tâches de codage.
Achèvement du code : profitez de la commodité de l'achèvement du code similaire à GitHub Copilot, en tirant parti des capacités du modèle GPT pour suggérer des extraits de code et des compléments en fonction des modèles de contexte et de programmation.
Actions personnalisables : exécutez une gamme d'actions en utilisant le modèle GPT, telles que la correction de la grammaire, la traduction, la génération de mots clés, la création de docstring, l'ajout de test, l'optimisation du code, le résumé, la fixation de bogues, l'explication du code, l'édition de Roxygen et l'analyse de lisibilité du code. De plus, vous pouvez définir vos propres actions personnalisées à l'aide d'un fichier JSON.
Pour une compréhension complète de la fonctionnalité de l'extension, vous pouvez regarder une vidéo de vitrine de plugin
Assurez-vous que vous avez installé curl .
Obtenez une clé API d'Openai, que vous pouvez obtenir ici. (Remarque: un abonnement ChatGpt Plus n'inclut actuellement pas les crédits API requis. Vous devrez acheter des crédits API séparément.)
La clé API OpenAI peut être fournie de l'une des deux façons suivantes:
Dans l'option de configuration api_key_cmd , fournissez le chemin d'accès et les arguments à un exécutable qui renvoie la clé API via STDOUT.
Le définir via une variable d'environnement appelée $OPENAI_API_KEY .
Hôte de l'API Openai personnalisé avec l'option de configuration api_host_cmd ou variable d'environnement appelée $OPENAI_API_HOST . C'est utile si vous ne pouvez pas accéder directement à l'Openai
Les paramètres de curl personnalisés peuvent être passés à l'aide de l'option de configuration extra_curl_params . Il peut être utile si vous devez inclure des en-têtes supplémentaires pour les demandes:
{
... ,
extra_curl_params = {
" -H " ,
" Origin: https://example.com "
}
}Pour les déploiements Azure, vous devez spécifier la base d'URL, le moteur et le type API. Vous pouvez y parvenir de deux manières:
api_type_cmd , azure_api_base , azure_api_engine_cmd et azure_api_version_cmd . Chacun d'eux doit être une commande exécutable qui renvoie la valeur correspondante.Par exemple:
local config = {
api_host_cmd = ' echo -n "" ' ,
api_key_cmd = ' pass azure-openai-key ' ,
api_type_cmd = ' echo azure ' ,
azure_api_base_cmd = ' echo https://{your-resource-name}.openai.azure.com ' ,
azure_api_engine_cmd = ' echo chat ' ,
azure_api_version_cmd = ' echo 2023-05-15 '
}
require ( " chatgpt " ). setup ( config )$OPENAI_API_TYPE , $OPENAI_API_BASE , $OPENAI_API_AZURE_ENGINE et $OPENAI_API_AZURE_VERSION .Par exemple:
export OPENAI_API_TYPE= " azure "
export OPENAI_API_BASE= " https://{your-resource-name}.openai.azure.com "
export OPENAI_API_AZURE_ENGINE= " chat "
export OPENAI_API_AZURE_VERSION= " 2023-05-15 "Veuillez noter que les modèles de modification ont été obsolètes et peuvent ne pas fonctionner comme prévu.
Si vous utilisez Packer.nvim comme gestionnaire de plugin:
-- Packer
use ({
" jackMort/ChatGPT.nvim " ,
config = function ()
require ( " chatgpt " ). setup ()
end ,
requires = {
" MunifTanjim/nui.nvim " ,
" nvim-lua/plenary.nvim " ,
" folke/trouble.nvim " ,
" nvim-telescope/telescope.nvim "
}
})ou si vous utilisez paresseux.nvim:
-- Lazy
{
" jackMort/ChatGPT.nvim " ,
event = " VeryLazy " ,
config = function ()
require ( " chatgpt " ). setup ()
end ,
dependencies = {
" MunifTanjim/nui.nvim " ,
" nvim-lua/plenary.nvim " ,
" folke/trouble.nvim " , -- optional
" nvim-telescope/telescope.nvim "
}
} ChatGPT.nvim est livré avec les valeurs par défaut suivantes, vous pouvez les remplacer en passant la configuration comme param de configuration
https://github.com/jackmort/chatgpt.nvim/blob/main/lua/chatgpt/config.lua
Une configuration simple du modèle de chat pourrait ressembler à ceci:
{
" jackMort/ChatGPT.nvim " ,
event = " VeryLazy " ,
config = function ()
require ( " chatgpt " ). setup ({
-- this config assumes you have OPENAI_API_KEY environment variable set
openai_params = {
-- NOTE: model can be a function returning the model name
-- this is useful if you want to change the model on the fly
-- using commands
-- Example:
-- model = function()
-- if some_condition() then
-- return "gpt-4-1106-preview"
-- else
-- return "gpt-3.5-turbo"
-- end
-- end,
model = " gpt-4-1106-preview " ,
frequency_penalty = 0 ,
presence_penalty = 0 ,
max_tokens = 4095 ,
temperature = 0.2 ,
top_p = 0.1 ,
n = 1 ,
}
})
end ,
dependencies = {
" MunifTanjim/nui.nvim " ,
" nvim-lua/plenary.nvim " ,
" folke/trouble.nvim " , -- optional
" nvim-telescope/telescope.nvim "
}
}La fourniture de la clé API OpenAI via une variable d'environnement est dangereuse, car elle laisse la clé API facilement lisible par tout processus qui peut accéder aux variables d'environnement d'autres processus. De plus, il encourage l'utilisateur à stocker les informations d'identification dans un texte clair dans un fichier de configuration.
Comme alternative à la fourniture de la clé API via la variable d'environnement OPENAI_API_KEY , l'utilisateur est encouragé à utiliser l'option de configuration api_key_cmd . L'option de configuration api_key_cmd prend une chaîne, qui est exécutée au démarrage, et dont la sortie est utilisée comme touche API.
La configuration suivante utiliserait 1Passwords CLI, op , pour récupérer la clé API à partir du champ credential de l'entrée OpenAI .
require ( " chatgpt " ). setup ({
api_key_cmd = " op read op://private/OpenAI/credential --no-newline "
})La configuration suivante utiliserait GPG pour décrypter un fichier local contenant la touche API
local home = vim . fn . expand ( " $HOME " )
require ( " chatgpt " ). setup ({
api_key_cmd = " gpg --decrypt " .. home .. " /secret.txt.gpg "
}) Notez que les arguments api_key_cmd sont divisés par Whitespace. Si vous avez besoin d'un espace blanc à l'intérieur d'un argument (par exemple pour faire référence à un chemin avec des espaces), vous pouvez l'envelopper dans un script séparé.
Le plugin expose les commandes suivantes:
ChatGPT Commande ChatGPT qui ouvre une fenêtre interactive à l'aide du modèle gpt-3.5-turbo . (également connu sous le nom de ChatGPT )
ChatGPTActAs Commande ChatGPTActAs qui ouvre une sélection rapide à partir d'invites impressionnantes Chatgpt à utiliser avec le modèle gpt-3.5-turbo .

ChatGPTEditWithInstructions Commande ChatGPTEditWithInstructions qui ouvre une fenêtre interactive pour modifier le texte sélectionné ou la fenêtre entière à l'aide du modèle code-davinci-edit-001 (GPT 3.5 ajusté pour le codage).
Vous pouvez le cartographier en utilisant l'API LUA, par exemple en utilisant which-key.nvim :
local chatgpt = require ( " chatgpt " )
wk . register ({
p = {
name = " ChatGPT " ,
e = {
function ()
chatgpt . edit_with_instructions ()
end ,
" Edit with instructions " ,
},
},
}, {
prefix = " <leader> " ,
mode = " v " ,
})
ChatGPTRun Commande ChatGPTRun [action] qui exécute des actions spécifiques - voir le fichier actions.json pour une liste détaillée. Les actions disponibles sont:
grammar_correctiontranslatekeywordsdocstringadd_testsoptimize_codesummarizefix_bugsexplain_coderoxygen_editcode_readability_analysis - voir démo Toutes les actions ci-dessus utilisent le modèle gpt-3.5-turbo .
Il est possible de définir des actions personnalisées avec un fichier JSON. Voir actions.json pour un exemple. Le chemin d'accès des actions personnalisés peut être défini dans le champ Config (voir actions_paths dans l'exemple de configuration ci-dessus).
Un exemple d'action personnalisée peut ressembler à ceci: ( # Marks Commentaires)
{
"action_name" : {
"type" : "chat" , # or "completion" or "edit"
"opts" : {
"template" : "A template using possible variable: {{filetype}} (neovim filetype), {{input}} (the selected text) an {{argument}} (provided on the command line), {{filepath}} (the relative path to the file)" ,
"strategy" : "replace" , # or "display" or "append" or "edit"
"params" : { # parameters according to the official OpenAI API
"model" : "gpt-3.5-turbo" , # or any other model supported by `"type"` in the OpenAI API, use the playground for reference
"stop" : [
"```" # a string used to stop the model
]
}
},
"args" : {
"argument" : {
"type" : "strig" ,
"optional" : "true" ,
"default" : "some value"
}
}
}
} La stratégie edit consiste à afficher la sortie côte à côte avec l'entrée et disponible pour d'autres demandes d'édition. Pour l'instant, la stratégie edit est implémentée uniquement pour le type chat .
La stratégie display affiche la sortie dans une fenêtre flottante.
append et replace modifier le texte directement dans le tampon.
Lorsque vous utilisez ChatGPT et ChatGPTEditWithInstructions , les clés suivants sont disponibles:
<C-Enter> [les deux] à soumettre.<Cy> [les deux] pour copier / sauter la dernière réponse.<Co> [Les deux] basculez la fenêtre Paramètres.<Ch> [Les deux] basculez la fenêtre d'aide.<Tab> [Les deux] cycle sur Windows.<Cf> [CHAT] Cycle sur les modes (centre, restez à droite).<Cc> [les deux] pour fermer la fenêtre de chat.<Cp> [CHAT] Toggle Sessions List.<Cu> [CHAT] Faites défiler la fenêtre de chat.<Cd> [CHAT] Faites défiler la fenêtre de chat.<Ck> [CHAT] pour copier / sauter le code de la dernière réponse.<Cn> [CHAT] Démarrez une nouvelle session.<Cr> [CHAT] Draft Message (Créez un message sans le soumettre au serveur)<Cr> [CHAT] Switch Rôle (basculer entre l'utilisateur et le rôle assistant pour définir un flux de travail)<Cs> [les deux] Bascule la fenêtre du message système.<Ci> [Modifier la fenêtre] Utilisez la réponse comme entrée.<Cd> [Modifier la fenêtre] Afficher le diff entre les panneaux gauche et droit et utiliser les commandes de mode Difff Lorsque la fenêtre de paramètre est ouverte (avec <Co> ), les paramètres peuvent être modifiés en appuyant sur Enter sur la configuration associée. Les paramètres sont enregistrés sur les sections
Ajoutez-les à vos mappages de plugin whokey pour des liaisons pratiques
c = {
name = " ChatGPT " ,
c = { " <cmd>ChatGPT<CR> " , " ChatGPT " },
e = { " <cmd>ChatGPTEditWithInstruction<CR> " , " Edit with instruction " , mode = { " n " , " v " } },
g = { " <cmd>ChatGPTRun grammar_correction<CR> " , " Grammar Correction " , mode = { " n " , " v " } },
t = { " <cmd>ChatGPTRun translate<CR> " , " Translate " , mode = { " n " , " v " } },
k = { " <cmd>ChatGPTRun keywords<CR> " , " Keywords " , mode = { " n " , " v " } },
d = { " <cmd>ChatGPTRun docstring<CR> " , " Docstring " , mode = { " n " , " v " } },
a = { " <cmd>ChatGPTRun add_tests<CR> " , " Add Tests " , mode = { " n " , " v " } },
o = { " <cmd>ChatGPTRun optimize_code<CR> " , " Optimize Code " , mode = { " n " , " v " } },
s = { " <cmd>ChatGPTRun summarize<CR> " , " Summarize " , mode = { " n " , " v " } },
f = { " <cmd>ChatGPTRun fix_bugs<CR> " , " Fix Bugs " , mode = { " n " , " v " } },
x = { " <cmd>ChatGPTRun explain_code<CR> " , " Explain Code " , mode = { " n " , " v " } },
r = { " <cmd>ChatGPTRun roxygen_edit<CR> " , " Roxygen Edit " , mode = { " n " , " v " } },
l = { " <cmd>ChatGPTRun code_readability_analysis<CR> " , " Code Readability Analysis " , mode = { " n " , " v " } },
},