Neoai ist ein Neovim-Plugin, das Ihren Redakteur die Leistung von OpenAIs GPT-4 bietet. Es hilft Ihnen dabei, Code zu generieren, Text neu zu schreiben und sogar Vorschläge mit Ihrem Code zu erhalten. Das Plugin ist mit einer benutzerfreundlichen Schnittstelle erstellt, die es einfach macht, mit der KI zu interagieren und die Hilfe zu erhalten, die Sie benötigen.
HINWEIS: Dieses Plugin befindet sich früh. Es sind frühe Änderungen und können sich ändern.
Die Hauptmotivation für dieses Plugin besteht darin, eine nahtlose Integration von AI-Chat-Assistanten wie Chatgpt in Ihren Neovim-Codierungs-Workflow zu bieten. Ziel ist es, ein Tool zu erstellen, das mit Ihnen in Einklang steht, sodass Sie Fragen stellen und Hilfe erhalten können, ohne Ihren Fokus oder Ihren Codierungsrhythmus zu stören. Im Gegensatz zu den meisten vorhandenen Plugins, die tendenziell die Unterhaltung vor Produktivität priorisieren, betont dieses Plugin Effizienz und Nutzen. Durch die Erleichterung eines reibungslosen und reaktionsschnellen Codierungserlebnisses soll die Produktivität verbessert und die Codierung angenehmer gestaltet werden.
Um Neoai zu installieren, können Sie Ihren bevorzugten Plugin -Manager verwenden. Fügen Sie beispielsweise mit VIM-Plug die folgende Zeile zu Ihrem init.vim
oder .vimrc
hinzu, dass auch die auf dem System installierte NUI-Abhängigkeit und Curl erforderlich sind:
Plug 'MunifTanjim/nui.nvim'
Plug 'Bryley/neoai.nvim'
Laufen Sie dann :PlugInstall
, um die Plugins zu installieren.
Für faul.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 ,
}
Für 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 ,
})
Um dieses Plugin zu verwenden, stellen Sie sicher, dass Sie einen OpenAI -API -Schlüssel haben, der hier erstellt werden kann. Speichern Sie diesen Schlüssel in Ihren Umgebungsvariablen als OPENAI_API_KEY
.
Wichtiger Hinweis : Dieses Plugin ist nicht für unbeabsichtigte Einkäufe für Openai verantwortlich. Wenn ich dieses Plugin benutze, empfehle ich Ihnen, die Verwendung Ihres Kontos und der Einrichtung von Grenzen häufig zu überprüfen, damit Sie nicht mehr ausgeben, die Sie sich leisten können.
Dieses Plugin führt 3 Modi oder Möglichkeiten zur Interaktion mit den KI -Modellen ein.
Im Standardmodus öffnet sich eine GUI über den Befehl :NeoAI
, sodass Sie mit dem Modell chatten können. Diese Operation ähnelt dem, was Sie erhalten, wenn Sie sie in einem Browser verwenden, aber jetzt wird sie bequemer, wenn die GUI in Ihrem Redakteur befindet.
Im Eingabeaufforderungspuffer können Sie Text senden, indem Sie im Einfügenmodus die Eingabetaste drücken. Zusätzlich können Sie eine neue Linie mithilfe der Steuereingabetaste einfügen. Diese Zuordnung kann in der Konfiguration geändert werden.
Beachten Sie auch, dass das Plugin über eine Funktion verfügt, bei der die Ausgabe aus dem Modell automatisch im g
-Register gespeichert wird und alle Code -Snippets im c
-Register gespeichert werden. Diese können in der Konfiguration geändert werden.
Der Kontextmodus funktioniert ähnlich wie im normalen Modus. Sie können jedoch zusätzliche Informationen darüber bereitstellen, was Sie ändern möchten. Wenn Sie beispielsweise den Code eines anderen lesen und eine Beschreibung dessen benötigen, können Sie den Code im Puffer über den visuellen Modus hervorheben. Dann können Sie ausführen :NeoAIContext
und geben Sie etwas wie "Bitte erklären Sie diesen Code für mich" im prumenden Puffer ein.
Darüber hinaus können Sie einen Text hervorheben und "die Interpunktion und Grammatik in diesem Text reparieren" anfordern, um eine bessere Version des Textes zu erhalten.
Beachten Sie, dass wenn Sie den Befehl ohne Auswahl ausführen, der gesamte Puffer übergeben wird.
Der endgültige Modus wird mithilfe von :NeoAIInject
als "Injektmodus" bezeichnet. Dieser Modus arbeitet ohne die grafische Benutzeroberfläche, sodass Sie schnell eine Eingabeaufforderung an das Modell senden und die resultierende Ausgabe automatisch unter Ihrem Cursor eingefügt haben. All dies kann ohne Öffnen der GUI erfolgen. Darüber hinaus gibt es im Inject-Modus einen Untermodus, der mit Kontext ausgeführt werden kann.
Eine Funktion dieses Plugins ist die Erstellung von Verknüpfungen, die unten erläutert werden. Das Plugin umfasst zwei eingebaute Verknüpfungen; Die erste Reformate wählten Text aus, um die Lesbarkeit zu verbessern, wobei der Standardschlüssel <leader>as
(für AI und S für zusammengefasst) ist.
Die andere integrierte Verknüpfung ist die automatische Generierung von Git-Commit-Nachrichten für Sie:
Achtung : Beachten Sie, dass die Überbeschreibung dieser Funktion zu einer Ansammlung von Daten führen kann, die an das Modell gesendet werden, was zu hohen Kosten führen kann. Um dies zu vermeiden, wird empfohlen, kleinere Commits zu erstellen oder die Funktion weniger häufig zu verwenden. Es ist unerlässlich, Ihre Verwendung im Auge zu behalten, der über diesen Link überwacht werden kann
Um das Plugin einzurichten, fügen Sie den folgenden Code mit Standardwerten zu Ihrem init.lua
hinzu (oder setzen Sie unter die config
, wenn Sie Lazy.nvim oder Packer.nvim verwenden.
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 ,
},
},
})
Die Setup -Funktion akzeptiert eine Optionstabelle zum Konfigurieren des Plugins. Die verfügbaren Optionen sind wie folgt:
output_popup_text
: Header -Text im Ausgabe -Popup -Fenster (Standard: "Neoai").input_popup_text
: Header -Text im Eingabe -Popup -Fenster (Standard: "Eingabeaufforderung").width
: Breite des Fensters als Prozentsatz (z. B. 30 = 30%, Standard: 30).output_popup_height
: Höhe des Ausgangspopups als Prozentsatz (z. B. 80 = 80%, Standard: 80).submit
: Schlüsselbindung, um die Eingabeaufforderung einzureichen. Wenn auf eingestellt ist, wird eine neue Linie eingefügt. (Standard: "").models
: Eine Liste der zu verwendenden Modelle:name
: Der Name des Modellanbieters (z. B. "Openai")model
: entweder eine Zeichenfolge des zu verwendenden Modellnamens oder eine Liste von Modellnamenparams
: Eine Parametertabelle zum Übergeben in das Modell (z. B. Temperatur, top_p)register_output
: Eine Tabelle mit einem Register als Schlüssel und eine Funktion, die die RAW -Ausgabe von der KI nimmt und das ausgibt, was Sie in dieses Register speichern möchten. Beispiel: register_output = {
[ " g " ] = function ( output )
return output
end ,
[ " c " ] = require ( " neoai.utils " ). extract_code_snippets ,
}
cutoff_width
: Wenn der Text länger als dieser Wert wird, sollte er in eine neue Zeile gehen. Wenn auf NIL eingestellt wird, wird die Länge ignoriert (Standard: 75).context_prompt
: Eine Funktion, die die Eingabeaufforderung generiert, die bei Verwendung von Kontextmodi verwendet werden soll. Beispiel: 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
end
open_api_key_env
(veraltet, verwenden Sie stattdessen api_key.env
): Die Umgebungsvariable, die die OpenAI -API -Schlüssel enthält. Der Standardwert ist "openai_api_key".api_key.env
: Die Umgebungsvariable, die den OpenAI -API -Schlüssel enthält. Der Standardwert ist "openai_api_key".api_key.value
: Der OpenAI -API -Schlüssel, der Vorrang vor api_key .env
hat.api_key.get
: Eine Funktion, die den OpenAI -API -Schlüssel abruft. Eine Beispielimplementierung finden Sie im Setup -Abschnitt. Es hat den höheren Vorrang. mappings
: Eine Tabelle mit den folgenden Aktionen, die Schlüssel sein können:
select_up
: Wählt das Ausgangsfenster aus, wenn es im Eingangsfenster istselect_down
: Wählt das Eingangsfenster aus, wenn im Ausgabefenster Der Wert ist der Schlüsselbindungs- (en) für diese Aktionen oder nil
, wenn keine Aktion
shortcuts
: Eine Reihe von Abkürzungen. Jede Abkürzung ist eine Tabelle mit:name
: eine Zeichenfolge. Der Name der Verknüpfung kann mit: Neoaishortcut auslösenkey
: Der Schlüsselbindwert zum Hören für oder nil, wenn kein Schlüsselbind für die Verknüpfung.desc
eine Schnur oder Null. Die Beschreibung des Schlüsselbinds, falls vorhandenuse_context
: Wenn der Kontext aus Auswahl/Puffer verwendet werden soll.prompt
: Die Eingabeaufforderung zum Senden oder eine Funktion zum Senden der Eingabeaufforderung.modes
: Eine Liste von Modi, um den Schlüsselbind für "N" für normale "V" für Visual einzustellen.strip_function
: Die zu verwendende Streifenfunktion (optional). Intelligent schaltet das Neoai -Fenster um. Wenn das Fenster geschlossen ist, wird es geöffnet und sendet die optionale [Eingabeaufforderung]. Wenn das Fenster geöffnet und fokussiert ist, wird es schließlich geschlossen. Wenn das Fenster geöffnet, aber nicht fokussiert ist, fokussiert es das Fenster und sendet die optionale [Eingabeaufforderung].
Schaltet das Neoai -Fenster um. Wenn das Fenster geschlossen ist, wird es geöffnet und sendet die optionale [Eingabeaufforderung]. Wenn das Fenster geöffnet ist, schließt es.
Öffnet das Neoai -Fenster und sendet die optionale [Eingabeaufforderung].
Schließt das Neoai -Fenster.
Intelligent schaltet das Neoai -Fenster mit Kontext um. Wenn das Fenster geschlossen ist, wird es geöffnet und sendet die optionale [Eingabeaufforderung]. Wenn das Fenster geöffnet und fokussiert ist, wird es schließlich geschlossen. Wenn das Fenster geöffnet, aber nicht fokussiert ist, fokussiert es das Fenster und sendet die optionale [Eingabeaufforderung]. Der für diesen Befehl verwendete Kontext ist der visuell ausgewählte Text oder der gesamte Puffer, wenn keine Auswahl getroffen wird.
Öffnet das Neoai -Fenster mit Kontext und sendet die optionale [Eingabeaufforderung]. Der für diesen Befehl verwendete Kontext ist der visuell ausgewählte Text oder der gesamte Puffer, wenn keine Auswahl getroffen wird.
Schließt das Neoai -Fenster mit Kontext.
Sendet die [Eingabeaufforderung] an die KI und injiziert die AI -Antwort direkt in den Puffer, ohne das Neoai -Fenster zu öffnen.
Sendet die [Eingabeaufforderung] an die KI und injiziert die AI -Antwort direkt in den Puffer, ohne das Neoai -Fenster zu öffnen. Die Antwort wird von allem außer Code -Snippets abgebaut.
Sendet die [Eingabeaufforderung] mit Kontext an die KI und injiziert die AI -Antwort direkt in den Puffer, ohne das Neoai -Fenster zu öffnen. Der für diesen Befehl verwendete Kontext ist der visuell ausgewählte Text oder der gesamte Puffer, wenn keine Auswahl getroffen wird.
Sendet die [Eingabeaufforderung] mit Kontext an die KI und injiziert die AI -Antwort direkt in den Puffer, ohne das Neoai -Fenster zu öffnen. Die Antwort wird von allem außer Code -Snippets abgebaut. Der für diesen Befehl verwendete Kontext ist der visuell ausgewählte Text oder der gesamte Puffer, wenn keine Auswahl getroffen wird.
Löst eine Neoai -Verknüpfung aus, die in der Konfiguration über den Namen anstelle einer Schlüsselbindung erstellt wird.
Lizenziert unter der MIT -Lizenz. Überprüfen Sie die Lizenzdatei für Details.