ChatGPT es un complemento neovim que le permite utilizar sin esfuerzo la API de OpenAI CHATGPT, lo que le permite generar respuestas del lenguaje natural desde el CHATGPT de OpenAI directamente dentro del editor en respuesta a sus consultas.

Preguntas y respuestas interactivas : participar en sesiones interactivas de preguntas y respuestas con el poderoso modelo GPT (CHATGPT) utilizando una interfaz intuitiva.
Conversaciones basadas en la persona : explore diversas perspectivas y tenga conversaciones con diferentes personajes seleccionando indicaciones de increíbles indicaciones de chatGPT.
Asistencia de edición de código : Mejore su experiencia de codificación con una ventana de edición interactiva impulsada por el modelo GPT, ofreciendo instrucciones adaptadas para tareas de codificación.
Finalización del código : disfrute de la conveniencia de la finalización del código similar al copilot de GitHub, aprovechando las capacidades del modelo GPT para sugerir fragmentos de código y completos basados en los patrones de contexto y programación.
Acciones personalizables : ejecute una variedad de acciones que utilicen el modelo GPT, como la corrección de gramática, la traducción, la generación de palabras clave, la creación de documentos, la adición de la prueba, la optimización del código, el resumen, la fijación de errores, la explicación del código, la edición de Roxygen y el análisis de legibilidad de código. Además, puede definir sus propias acciones personalizadas utilizando un archivo JSON.
Para una comprensión integral de la funcionalidad de la extensión, puede ver un video de exhibición de complementos
Asegúrese de haber instalado curl .
Obtenga una llave API de OpenAI, que puede obtener aquí. (Nota: una suscripción CHATGPT Plus actualmente no incluye los créditos API requeridos. Tendrá que comprar créditos API por separado).
La tecla API de OpenAI se puede proporcionar en una de las dos siguientes maneras:
En la opción de configuración api_key_cmd , proporcione la ruta y los argumentos a un ejecutable que devuelve la clave API a través de STDOUT.
Configurarlo a través de una variable de entorno llamada $OPENAI_API_KEY .
Host API Operai personalizado con la opción de configuración api_host_cmd o la variable de entorno llamada $OPENAI_API_HOST . Es útil si no puede acceder a OpenAi directamente
Los parámetros de curl personalizados se pueden pasar utilizando la opción de configuración extra_curl_params . Puede ser útil si necesita incluir encabezados adicionales para las solicitudes:
{
... ,
extra_curl_params = {
" -H " ,
" Origin: https://example.com "
}
}Para las implementaciones de Azure, debe especificar la base de URL, el motor y el tipo API. Puedes lograr esto de una de dos maneras:
api_type_cmd , azure_api_base , azure_api_engine_cmd y azure_api_version_cmd . Cada uno de estos debe ser un comando ejecutable que devuelva el valor correspondiente.Por ejemplo:
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 y $OPENAI_API_AZURE_VERSION .Por ejemplo:
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 "Tenga en cuenta que los modelos de edición se han desactivado y pueden no funcionar como se esperaba.
Si está utilizando Packer.nvim como Administrador de complementos:
-- 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 "
}
})o si estás usando lazy.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 viene con los siguientes valores predeterminados, puede anularlos pasando la configuración como parámetro de configuración
https://github.com/jackmort/chatgpt.nvim/blob/main/lua/chatgpt/config.lua
Una configuración simple del modelo de chat podría verse algo así:
{
" 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 "
}
}Proporcionar la clave API de OpenAI a través de una variable de entorno es peligroso, ya que deja la clave API fácilmente legible por cualquier proceso que pueda acceder a las variables de entorno de otros procesos. Además, alienta al usuario a almacenar la credencial en Texto Clear en un archivo de configuración.
Como alternativa para proporcionar la tecla API a través de la variable de entorno OPENAI_API_KEY , se alienta al usuario que use la opción de configuración api_key_cmd . La opción de configuración api_key_cmd toma una cadena, que se ejecuta al inicio y cuya salida se usa como la clave API.
La siguiente configuración usaría 1Passwords CLI, op , para obtener la tecla API del campo de credential de la entrada OpenAI .
require ( " chatgpt " ). setup ({
api_key_cmd = " op read op://private/OpenAI/credential --no-newline "
})La siguiente configuración usaría GPG para descifrar un archivo local que contiene la clave API
local home = vim . fn . expand ( " $HOME " )
require ( " chatgpt " ). setup ({
api_key_cmd = " gpg --decrypt " .. home .. " /secret.txt.gpg "
}) Tenga en cuenta que los argumentos api_key_cmd están divididos por Whitespace. Si necesita espacio en blanco dentro de un argumento (por ejemplo, para hacer referencia a una ruta con espacios), puede envolverlo en un script separado.
El complemento expone los siguientes comandos:
ChatGPT Comando ChatGPT que abre la ventana interactiva utilizando el modelo gpt-3.5-turbo . (también conocido como ChatGPT )
ChatGPTActAs Comando ChatGPTActAs que abre una selección rápida de las increíbles indicaciones de ChatGPT que se utilizarán con el modelo gpt-3.5-turbo .

ChatGPTEditWithInstructions Comando ChatGPTEditWithInstructions que abre una ventana interactiva para editar texto o ventana completa utilizando el modelo code-davinci-edit-001 (GPT 3.5 ajustado para la codificación).
Puede mapearlo usando la API Lua, por ejemplo, usando 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 Comando ChatGPTRun [action] que ejecuta acciones específicas: consulte actions.json File para una lista detallada. Las acciones disponibles son:
grammar_correctiontranslatekeywordsdocstringadd_testsoptimize_codesummarizefix_bugsexplain_coderoxygen_editcode_readability_analysis - ver demostración Todas las acciones anteriores están utilizando el modelo gpt-3.5-turbo .
Es posible definir acciones personalizadas con un archivo JSON. Ver actions.json para un ejemplo. La ruta de las acciones personalizadas se puede establecer en la configuración (ver actions_paths en el ejemplo de configuración anterior).
Un ejemplo de acción personalizada puede verse así: ( # marca comentarios)
{
"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 estrategia edit consiste en mostrar la salida al lado de la entrada y disponible para nuevas solicitudes de edición. Por ahora, la estrategia edit se implementa solo para el tipo chat .
La estrategia display muestra la salida en una ventana flotante.
append y replace modificar el texto directamente en el búfer.
Cuando se usa ChatGPT y ChatGPTEditWithInstructions , las siguientes teclas están disponibles:
<C-Enter> [ambos] para enviar.<Cy> [ambos] para copiar/yank Última respuesta.<Co> [Ambos] Ventana de configuración de alternativa.<Ch> [ambos] alternar la ventana de ayuda.<Tab> [Ambos] Ciclo sobre Windows.<Cf> [CHAT] Ciclo sobre los modos (centro, adhiérase a la derecha).<Cc> [ambos] para cerrar la ventana de chat.<Cp> [CHAT] Lista de sesiones de alternar.<Cu> [CHAT] Desplácese por la ventana de chat.<Cd> [CHAT] Desplácese hacia abajo en la ventana de chat.<Ck> [CHAT] para copiar/Yank Código de la última respuesta.<Cn> [CHAT] Comience una nueva sesión.<Cr> [chat] Mensaje de borrador (cree un mensaje sin enviarlo al servidor)<Cr> [chat] cambiar rol (cambiar entre el usuario y el rol de asistente para definir un flujo de trabajo)<Cs> [ambos] TOGLA DEL MENSAJE DEL SISTEMA DEL SISTEMA.<Ci> [Ventana de edición] Use la respuesta como entrada.<Cd> [editar ventana] Vea la diferencia entre los paneles izquierdo y derecho y use comandos de modo Diff Cuando se abre la ventana de ajuste (con <Co> ), la configuración se puede modificar presionando Enter en la configuración relacionada. La configuración se guardan en todas las secciones
Agreguelos a sus asignaciones de complementos WhatKey para enlaces convenientes
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 " } },
},