Neoai-это плагин Neovim, который приносит мощность GPT-4 Openai непосредственно в ваш редактор. Это помогает вам генерировать код, переписать текст и даже получить предложения в контексте с вашим кодом. Плагин построен с удобным интерфейсом, что позволяет легко взаимодействовать с ИИ и получить необходимую помощь.
Примечание. Этот плагин в начале ранних изменений и может быть изменен.
Основная мотивация этого плагина-обеспечить бесшовную интеграцию с помощью AI-помощников, таких как Chatgpt, в ваш рабочий процесс кодирования Neovim. Цель состоит в том, чтобы создать инструмент, который работает с вами в гармонии, позволяя вам задавать вопросы и получать помощь, не нарушая вашего фокуса или ритма кодирования. В отличие от большинства существующих плагинов, которые, как правило, определяют приоритеты развлечения по сравнению с производительностью, этот плагин подчеркивает эффективность и полезность. Облегчая плавное и отзывчивое опыт кодирования, он направлен на повышение производительности и сделает кодирование более приятным.
Чтобы установить Neoai, вы можете использовать свой любимый менеджер плагинов. Например, с Vim-plug добавьте следующую строку в свой init.vim или .vimrc , обратите внимание, что она также требует зависимости NUI и сгибания, установленной в системе:
Plug 'MunifTanjim/nui.nvim'
Plug 'Bryley/neoai.nvim'
Затем запустите :PlugInstall для установки плагинов.
Для ленивого. Нвим:
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 ,
}Для упаковщика:
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 ,
})
Чтобы использовать этот плагин, убедитесь, что у вас есть ключ API OpenAI, который можно создать здесь. Сохраните этот ключ в вашей среде переменные как OPENAI_API_KEY .
Важное примечание : этот плагин не несет ответственности за непреднамеренные покупки, совершенные в OpenAI. Используя этот плагин, я бы порекомендовал вам часто проверять использование своей учетной записи и ограничения настройки, поэтому вы не тратите больше, что вы можете себе позволить.
Этот плагин представляет 3 режима или способы взаимодействия с моделями ИИ.
В режиме по умолчанию графический интерфейс открывается на стороне, используя команду :NeoAI , позволяя вам общаться с моделью. Эта операция похожа на то, что вы получаете при использовании ее в браузере, но теперь она стала более удобной благодаря тому, что графический интерфейс находится внутри вашего редактора.

В буфере приглашения вы можете отправить текст, нажав Enter, находясь в режиме вставки. Кроме того, вы можете вставить новую линию, используя Entrol Enter. Это отображение может быть изменено в конфигурации.
Также обратите внимание, что плагин имеет функцию, в которой выход из модели автоматически сохраняется в регистре g , а все фрагменты кода сохраняются в регистра c Они могут быть изменены в конфигурации.
Контекстный режим работает аналогично нормальному режиму. Тем не менее, у вас есть возможность предоставить дополнительную информацию о том, что вы хотите изменить. Например, если вы читаете чужой код и нуждаетесь в описании того, что он делает, вы можете выделить код в буфере через визуальный режим. Затем вы можете запустить :NeoAIContext и ввести что -то вроде «Пожалуйста, объясните этот код для меня» в буфере приглашения.

Кроме того, вы можете выделить некоторые тексты и запросить «исправить пунктуацию и грамматики в этом тексте», чтобы получить лучшую версию текста.
Обратите внимание, что если вы запускаете команду без какого -либо выбора, то весь буфер передается.
Окончательный режим известен как «режим инъекции» с помощью :NeoAIInject . Этот режим работает без графического пользовательского интерфейса, позволяя быстро отправлять подсказку в модель и получить полученный выход, автоматически вставленную под вашим курсором. Все это можно сделать без открытия графического интерфейса. Кроме того, в режиме инъекции есть подмод, который можно выполнить с контекстом.

Одной из функций этого плагина является создание ярлыков, которые объясняются ниже. Плагин включает в себя два встроенных ярлыка; Первый переформат выбрал текст для улучшения читаемости, причем ключ по умолчанию - это <leader>as (для ИИ и S для суммирования).

Другой встроенный ярлык-это автоматическое генерирование сообщений о коммит GIT для вас:

ВНИМАНИЕ : Имейте в виду, что чрезмерное использование этой функции может привести к накоплению данных, отправленных модели, что может привести к высоким затратам. Чтобы избежать этого, рекомендуется сделать меньшие коммиты или эта функция использовалась реже. Необходимо отслеживать ваше использование, которое можно контролировать по этой ссылке
Чтобы настроить плагин, добавьте следующий код со значениями по умолчанию в свой init.lua (или поместите под параметр config при использовании lazy.nvim или 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 ,
},
},
})Функция настройки принимает таблицу параметров для настройки плагина. Доступные варианты следующие:
output_popup_text : текст заголовка, показанный в окне всплывающего окна вывода (по умолчанию: "neoai").input_popup_text : текст заголовка, показанный в окне всплывающего окна ввода (по умолчанию: «Приглашение»).width : ширина окна в процентах (например, 30 = 30%, по умолчанию: 30).output_popup_height : высота всплывающего окна вывода в процентах (например, 80 = 80%, по умолчанию: 80).submit : обязательство ключей для отправки приглашения. Если установлено, будет сопоставлено для вставки Newline. (по умолчанию: "").models : список моделей для использования:name : Имя поставщика моделей (например, "Openai")model : либо строка имени модели для использования, либо список имен моделейparams : таблица параметров для прохождения в модель (например, температура, top_p)register_output : таблица с регистрацией в качестве ключа и функцией, которая берет необработанный выход из ИИ и выводит то, что вы хотите сохранить в этом регистре. Пример: register_output = {
[ " g " ] = function ( output )
return output
end ,
[ " c " ] = require ( " neoai.utils " ). extract_code_snippets ,
}cutoff_width : при инъекции, если текст становится длиннее, чем это значение, он должен перейти к новой строке. Если установлено значение NIL, длина игнорируется (по умолчанию: 75).context_prompt : функция, которая генерирует подсказку, которая будет использоваться при использовании режимов контекста. Пример: 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 (устарел, используйте вместо этого api_key.env ): переменная среды, содержащая ключ API OpenAI. Значение по умолчанию - "openai_api_key".api_key.env : переменная среды, содержащая ключ API OpenAI. Значение по умолчанию - "openai_api_key".api_key.value : ключ API OpenAI, который имеет приоритет над api_key .env .api_key.get : функция, которая извлекает ключ OpenAI API. Для примера реализации см. В разделе «Настройка». Он имеет более высокий приоритет. mappings : таблица, содержащая следующие действия, которые могут быть ключами:
select_up : выбирает окно вывода, когда в окне вводаselect_down : выбирает окно ввода, когда в окне вывода Значение - это nil
shortcuts : массив ярлыков. Каждый ярлык - это таблица, содержащая:name : строка. Название ярлыка может запустить, используя: neoaishortcutkey : значение связывания ключей для прослушивания или нуля, если нет связки ключей для ярлыка.desc строку или ноль. Описание связок ключей, если таковые имеютсяuse_context : если следует использовать контекст из выбора/буфера.prompt : подсказка отправки или функция для создания подсказки для отправки.modes : список режимов для установки связок ключей для «n» для нормального «v» для Visual.strip_function : функция полоски для использования (необязательно). Умный переключает окно Neoai. Если окно закрыто, оно откроется и отправит дополнительную [запрос]. Если окно открыто и сфокусировано, оно закроется, наконец, если окно будет открыто, но не сфокусировано, оно сосредоточит окно и отправит дополнительную [подсказку].
Переключает окно Neoai. Если окно закрыто, оно откроется и отправит дополнительную [запрос]. Если окно открыто, оно закроется.
Открывает окно Neoai и отправляет дополнительное [подсказка].
Закрывает окно Neoai.
Умный переключает окно Neoai с контекстом. Если окно закрыто, оно откроется и отправит дополнительную [запрос]. Если окно открыто и сфокусировано, оно закроется, наконец, если окно будет открыто, но не сфокусировано, оно сосредоточит окно и отправит дополнительную [подсказку]. Контекст, используемый для этой команды, представляет собой визуально выбранный текст или весь буфер, если выбор не сделан.
Открывает окно Neoai с контекстом и отправляет необязательное [подсказка]. Контекст, используемый для этой команды, представляет собой визуально выбранный текст или весь буфер, если выбор не сделан.
Закрывает окно Neoai с контекстом.
Отправляет [подсказку] в ИИ и непосредственно вводит ответ AI в буфер, не открывая окно Neoai.
Отправляет [подсказку] в ИИ и непосредственно вводит ответ AI в буфер, не открывая окно Neoai. Ответ будет лишен всего, кроме фрагментов кода.
Отправляет [подсказку] в AI с контекстом и непосредственно вводит ответ AI в буфер, не открывая окно Neoai. Контекст, используемый для этой команды, представляет собой визуально выбранный текст или весь буфер, если выбор не сделан.
Отправляет [подсказку] в AI с контекстом и непосредственно вводит ответ AI в буфер, не открывая окно Neoai. Ответ будет лишен всего, кроме фрагментов кода. Контекст, используемый для этой команды, представляет собой визуально выбранный текст или весь буфер, если выбор не сделан.
Выражает ярлык Neoai, который создается в конфигурации с помощью своего имени вместо связывания клавиш.
Лицензирован по лицензии MIT. Проверьте файл лицензии для получения подробной информации.