Neoai es un complemento Neovim que trae el poder del GPT-4 de OpenAI directamente a su editor. Le ayuda a generar código, reescribir texto e incluso obtener sugerencias en contexto con su código. El complemento está construido con una interfaz fácil de usar, lo que hace que sea fácil interactuar con la IA y obtener la ayuda que necesita.
Nota: Este complemento está temprano en sus primeros cambios y está sujeto a cambios.
La principal motivación detrás de este complemento es proporcionar una integración perfecta de los asistentes de chat de IA, como ChatGPT, en su flujo de trabajo de codificación neovim. El objetivo es crear una herramienta que funcione en armonía con usted, lo que le permite hacer preguntas y recibir asistencia sin interrumpir su enfoque o ritmo de codificación. A diferencia de la mayoría de los complementos existentes, que tienden a priorizar el entretenimiento sobre la productividad, este complemento enfatiza la eficiencia y la utilidad. Al facilitar una experiencia de codificación suave y receptiva, tiene como objetivo mejorar la productividad y hacer que la codificación sea más agradable.
Para instalar NeoAI, puede usar su Administrador de complementos favorito. Por ejemplo, con VIM-plug, agregue la siguiente línea a su init.vim o .vimrc , tenga en cuenta que también requiere la dependencia de NUI y el curl instalado en el sistema:
Plug 'MunifTanjim/nui.nvim'
Plug 'Bryley/neoai.nvim'
Luego ejecute :PlugInstall para instalar los complementos.
Para perezoso.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 complemento, asegúrese de tener una tecla API OpenAI que se pueda crear aquí. Guarde esta clave en sus variables de entorno como OPENAI_API_KEY .
Nota importante : Este complemento no es responsable de las compras involuntarias realizadas para OpenAI. Mientras usa este complemento, le recomendaría que verifique con frecuencia el uso de su cuenta y los límites de configuración, para que no gaste más que puede pagar.
Este complemento introduce 3 modos o formas de interactuar con los modelos AI.
En el modo predeterminado, una GUI se abre a un lado usando el comando :NeoAI , lo que le permite chatear con el modelo. Esta operación es similar a la que obtiene al usarla en un navegador, pero ahora se hace más conveniente por la GUI dentro de su editor.

En el búfer de solicitud, puede enviar texto presionando Enter mientras está en modo de inserción. Además, puede insertar una nueva línea utilizando Control Enter. Esta asignación se puede cambiar en la configuración.
También tenga en cuenta que el complemento tiene una característica en la que la salida del modelo se guarda automáticamente en el registro g y todos los fragmentos de código se guardan en el registro c Estos se pueden cambiar en la configuración.
El modo de contexto funciona de manera similar al modo normal. Sin embargo, tiene la capacidad de proporcionar información adicional sobre lo que desea cambiar. Por ejemplo, si está leyendo el código de otra persona y necesita una descripción de lo que hace, puede resaltar el código en el búfer a través del modo visual. Luego, puede ejecutar :NeoAIContext y escribir algo como "Explique este código para mí" en el búfer de inmediato.

Además, puede resaltar algún texto y solicitar "arreglar la puntuación y la gramática en este texto" para obtener una mejor versión del texto.
Tenga en cuenta que si ejecuta el comando sin ninguna selección, se pasa todo el búfer.
El modo final se conoce como "modo de inyección" usando :NeoAIInject . Este modo funciona sin la interfaz gráfica de usuario, lo que le permite enviar rápidamente una solicitud al modelo y tener la salida resultante insertada automáticamente debajo de su cursor. Todo esto se puede hacer sin abrir la GUI. Además, hay un submodo dentro del modo inyectado que se puede ejecutar con contexto.

Una característica de este complemento es crear atajos, que se explican a continuación. El complemento incluye dos atajos incorporados; Los primeros reformatos seleccionaron el texto para mejorar la legibilidad, con la clave predeterminada que es <leader>as (A para AI y S para resumir).

El otro atajo incorporado es la generación automática de mensajes de confirmación de git para usted:

PRECAUCIÓN : Tenga en cuenta que el uso excesivo de esta característica puede conducir a una acumulación de datos enviados al modelo, lo que puede dar lugar a altos costos. Para evitar esto, se recomienda hacer más pequeñas confirmaciones o que la característica se use con menos frecuencia. Es imperativo realizar un seguimiento de su uso, que se puede monitorear a través de este enlace
Para configurar el complemento, agregue el siguiente código con los valores predeterminados a su init.lua (o coloque debajo de la opción config si usa lazy.nvim o 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 función de configuración acepta una tabla de opciones para configurar el complemento. Las opciones disponibles son las siguientes:
output_popup_text : texto del encabezado que se muestra en la ventana emergente de salida (predeterminada: "neoai").input_popup_text : texto del encabezado que se muestra en la ventana emergente de entrada (predeterminada: "solicitante").width : ancho de la ventana como porcentaje (por ejemplo, 30 = 30%, predeterminado: 30).output_popup_height : altura de la ventana emergente de salida como porcentaje (por ejemplo, 80 = 80%, predeterminado: 80).submit : enlace de clave para enviar el mensaje. Si se establece, se asignará para insertar una nueva línea. (por defecto: "").models : una lista de modelos para usar:name : El nombre del proveedor de modelos (por ejemplo, "OpenAi")model : ya sea una cadena del nombre del modelo para usar o una lista de nombres de modelosparams : una tabla de parámetros para pasar al modelo (por ejemplo, temperatura, top_p)register_output : una tabla con un registro como clave y una función que toma la salida sin procesar de la IA y emite lo que desea guardar en ese registro. Ejemplo: register_output = {
[ " g " ] = function ( output )
return output
end ,
[ " c " ] = require ( " neoai.utils " ). extract_code_snippets ,
}cutoff_width : al inyectar, si el texto se vuelve más largo que este valor, debe ir a una nueva línea. Si se establece en NIL, la longitud se ignora (predeterminada: 75).context_prompt : una función que genera la solicitud que se utilizará al usar modos de contexto. Ejemplo: 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 (desaprobado, use api_key.env en su lugar): la variable de entorno que contiene la tecla API de OpenAI. El valor predeterminado es "OpenAI_API_KEY".api_key.env : la variable de entorno que contiene la tecla API OpenAI. El valor predeterminado es "OpenAI_API_KEY".api_key.value : la tecla API OpenAI, que tiene prioridad sobre api_key .env .api_key.get : una función que recupera la tecla API de OpenAI. Para una implementación de ejemplo, consulte la sección Configuración. Tiene la mayor precedencia. mappings : una tabla que contiene las siguientes acciones que pueden ser claves:
select_up : selecciona la ventana de salida cuando se encuentra en la ventana de entradaselect_down : selecciona la ventana de entrada cuando se encuentra en la ventana de salida El valor es la (s) keybinding (s) para esas acciones o nil si no hay acción
shortcuts : una variedad de atajos. Cada atajo es una tabla que contiene:name : una cadena. El nombre del atajo puede activarse usando: neoaishortcutkey : el valor de KeyBind para escuchar o nil si no hay keybind para el atajo.desc una cadena o nulo. La descripción del keybind siuse_context : si se debe usar el contexto de la selección/búfer.prompt : la solicitud para enviar o una función para generar la solicitud para enviar.modes : una lista de modos para establecer el KeyBind para "N" para Normal ", V" para Visual.strip_function : la función de tira para usar (opcional). Smart alterna la ventana Neoi. Si la ventana está cerrada, se abrirá y enviará la opcional [Solicitud]. Si la ventana está abierta y enfocada, se cerrará, finalmente si la ventana está abierta pero no enfocada, enfocará la ventana y enviará el [aviso] opcional.
Alternar la ventana Neoi. Si la ventana está cerrada, se abrirá y enviará la opcional [Solicitud]. Si la ventana está abierta, se cerrará.
Abre la ventana Neoai y envía la opcional [Solicitud].
Cierra la ventana Neoi.
Smart alterna la ventana Neoi con contexto. Si la ventana está cerrada, se abrirá y enviará la opcional [Solicitud]. Si la ventana está abierta y enfocada, se cerrará, finalmente si la ventana está abierta pero no enfocada, enfocará la ventana y enviará el [aviso] opcional. El contexto utilizado para este comando es el texto seleccionado visualmente o el búfer completo si no se realiza una selección.
Abre la ventana Neoi con contexto y envía el [aviso] opcional. El contexto utilizado para este comando es el texto seleccionado visualmente o el búfer completo si no se realiza una selección.
Cierra la ventana Neoi con contexto.
Envía el [indicador] a la IA e inyecta directamente la respuesta de IA al búfer sin abrir la ventana Neoi.
Envía el [indicador] a la IA e inyecta directamente la respuesta de IA al búfer sin abrir la ventana Neoi. La respuesta será despojada de todo excepto fragmentos de código.
Envía el [indicador] al IA con contexto e inyecta directamente la respuesta de IA al búfer sin abrir la ventana Neoi. El contexto utilizado para este comando es el texto seleccionado visualmente o el búfer completo si no se realiza una selección.
Envía el [indicador] al IA con contexto e inyecta directamente la respuesta de IA al búfer sin abrir la ventana Neoi. La respuesta será despojada de todo excepto fragmentos de código. El contexto utilizado para este comando es el texto seleccionado visualmente o el búfer completo si no se realiza una selección.
Desencadena un atajo de Neoai que se crea en la configuración a través de su nombre en lugar de una eliminación de teclas.
Licenciado bajo la licencia del MIT. Consulte el archivo de licencia para obtener más detalles.