ChatGPT ist ein Neovim -Plugin, mit dem Sie die OpenAI -Chatgpt -API mühelos nutzen können, wodurch Sie in der Antwort auf Ihre Anfragen natürliche Sprachantworten von OpenAIs Chatgpt direkt innerhalb des Editors generieren können.

Interaktive Fragen und Antworten : Mit dem leistungsstarken GPT-Modell (CHATGPT) unter Verwendung einer intuitiven Schnittstelle interaktive Fragen und Antworten mit dem leistungsfähigen GPT-Modell (CHATGPT) durchführen.
Persona-basierte Gespräche : Erforschen Sie verschiedene Perspektiven und führen Sie Gespräche mit verschiedenen Personas, indem Sie Eingabeaufforderungen aus fantastischen Chatgpt-Eingabeaufforderungen auswählen.
Unterstützung bei der Code -Bearbeitung : Verbessern Sie Ihre Codierungserfahrung mit einem interaktiven Bearbeitungsfenster, das vom GPT -Modell betrieben wird und Anweisungen bietet, die auf Codierungsaufgaben zugeschnitten sind.
CODE -Fertigstellung : Genießen Sie die Komfort des Codes -Abschlusses ähnlich wie Github Copilot und nutzen Sie die Funktionen des GPT -Modells, um Code -Snippets und -abschlüsse basierend auf Kontext- und Programmiermustern vorzuschlagen.
Anpassbare Aktionen : Führen Sie eine Reihe von Aktionen aus, bei denen das GPT -Modell verwendet wird, z. B. Grammatikkorrektur, Übersetzung, Schlüsselwortgenerierung, Erstellung von Dokumenten, Testabzug, Codeoptimierung, Zusammenfassung, Fehlerbehebung, Code -Erklärung, Roxygen -Bearbeitung und Code -Leesbarkeitsanalyse. Darüber hinaus können Sie Ihre eigenen benutzerdefinierten Aktionen mithilfe einer JSON -Datei definieren.
Für ein umfassendes Verständnis der Funktionalität der Erweiterung können Sie sich ein Plugin -Showcase -Video ansehen
Stellen Sie sicher, dass Sie curl installiert haben.
Holen Sie sich einen API -Schlüssel von OpenAI, den Sie hier erhalten können. (HINWEIS: Ein ChatGPT -Plus -Abonnement enthält derzeit nicht die erforderlichen API -Credits. Sie müssen API -Credits separat kaufen.)
Der OpenAI -API -Schlüssel kann auf eine der folgenden zwei Arten bereitgestellt werden:
Geben Sie in der Konfigurationsoption api_key_cmd den Pfad und die Argumente für eine ausführbare Datei an, die die API -Taste über STDOut zurückgibt.
Setzen Sie es über eine Umgebungsvariable mit dem Namen $OPENAI_API_KEY .
Benutzerdefinierte OpenAI -API -Host mit der Konfigurationsoption api_host_cmd oder Umgebungsvariable namens $OPENAI_API_HOST . Es ist nützlich, wenn Sie nicht direkt auf OpenAI zugreifen können
Benutzerdefinierte Curl -Parameter können mit der Konfigurationsoption extra_curl_params übergeben werden. Es kann nützlich sein, wenn Sie zusätzliche Header für Anfragen einfügen müssen:
{
... ,
extra_curl_params = {
" -H " ,
" Origin: https://example.com "
}
}Für Azure -Bereitstellungen müssen Sie die URL -Basis, die Engine und den API -Typ angeben. Sie können dies auf zwei Arten erreichen:
api_type_cmd , azure_api_base , azure_api_engine_cmd und azure_api_version_cmd . Jede von diesen sollte ein ausführbarer Befehl sein, der den entsprechenden Wert zurückgibt.Zum Beispiel:
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 und $OPENAI_API_AZURE_VERSION .Zum Beispiel:
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 "Bitte beachten Sie, dass Bearbeitungsmodelle veraltet sind und möglicherweise nicht wie erwartet funktionieren.
Wenn Sie Packer.nvim als Plugin -Manager verwenden:
-- 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 "
}
})oder wenn Sie Lazy.nvim verwenden:
-- 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 wird mit den folgenden Standardeinstellungen geliefert.
https://github.com/jackmort/chatgpt.nvim/blob/main/lua/chatgpt/config.lua
Eine einfache Konfiguration des Chat -Modells könnte ungefähr so aussehen:
{
" 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 "
}
}Die Bereitstellung der OpenAI -API -Schlüssel über eine Umgebungsvariable ist gefährlich, da der API -Schlüssel durch jeden Prozess leicht lesbar ist, der auf die Umgebungsvariablen anderer Prozesse zugreifen kann. Darüber hinaus ermutigt es den Benutzer, den Anmeldeinformationen in Clear-Text in einer Konfigurationsdatei zu speichern.
Als Alternative zur Bereitstellung der API -Taste über die Umgebungsvariable OPENAI_API_KEY wird der Benutzer empfohlen, die Option api_key_cmd -Konfiguration zu verwenden. Die Option api_key_cmd -Konfiguration nimmt eine Zeichenfolge, die beim Start ausgeführt wird und deren Ausgabe als API -Schlüssel verwendet wird.
In der folgenden Konfiguration wird 1Passwords CLI, op , verwendet, um die API -Taste aus dem Feld credential des OpenAI -Eintrags" abzurufen.
require ( " chatgpt " ). setup ({
api_key_cmd = " op read op://private/OpenAI/credential --no-newline "
})Mit der folgenden Konfiguration wird GPG verwendet, um eine lokale Datei zu entschlüsseln, die die API -Taste enthält
local home = vim . fn . expand ( " $HOME " )
require ( " chatgpt " ). setup ({
api_key_cmd = " gpg --decrypt " .. home .. " /secret.txt.gpg "
}) Beachten Sie, dass die Argumente api_key_cmd von Whitespace aufgeteilt werden. Wenn Sie in einem Argument eine Weißespace benötigen (z. B. um einen Pfad mit Leerzeichen zu verweisen), können Sie ihn in ein separates Skript einwickeln.
Plugin enthält die folgenden Befehle:
ChatGPT ChatGPT -Befehl, mit dem das interaktive Fenster mit dem gpt-3.5-turbo Modell geöffnet wird. (auch als ChatGPT bekannt)
ChatGPTActAs Der Befehl ChatGPTActAs , der eine schnelle Auswahl aus fantastischen Chatgpt-Eingabeaufforderungen öffnet, die mit dem gpt-3.5-turbo Modell verwendet werden sollen.

ChatGPTEditWithInstructions Der Befehl ChatGPTEditWithInstructions , mit dem das interaktive Fenster geöffnet wird, um ausgewähltem Text oder ganzem Fenster mit dem code-davinci-edit-001 Modell zu bearbeiten (GPT 3.5 feinstabiert für die Codierung).
Sie können es mit der Lua-API zuordnen, z. B. mit 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 ChatGPTRun [action] -Befehl, mit dem bestimmte Aktionen ausgeführt werden - siehe actions.json -Datei für eine detaillierte Liste. Verfügbare Aktionen sind:
grammar_correctiontranslatekeywordsdocstringadd_testsoptimize_codesummarizefix_bugsexplain_coderoxygen_editcode_readability_analysis - siehe Demo Alle oben genannten Aktionen verwenden gpt-3.5-turbo Modell.
Es ist möglich, benutzerdefinierte Aktionen mit einer JSON -Datei zu definieren. Siehe actions.json für ein Beispiel. Der Pfad der benutzerdefinierten Aktionen kann in der Konfiguration festgelegt werden (siehe actions_paths -Feld im obigen Konfigurationsbeispiel).
Ein Beispiel für benutzerdefinierte Aktionen kann so aussehen: ( # Marks Kommentare)
{
"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"
}
}
}
} Die edit besteht darin, die Ausgabe nebeneinander mit dem Eingang und verfügbarer Bearbeitungsanforderungen zu zeigen. Im Moment wird die edit nur für chat -Typ implementiert.
Die display zeigt die Ausgabe in einem Schwimmerfenster.
append den Text direkt im Puffer an und replace .
Bei Verwendung ChatGPT und ChatGPTEditWithInstructions sind die folgenden Schlüsselbindungen verfügbar:
<C-Enter> [beide] einreichen.<Cy> [beide], um die letzte Antwort zu kopieren/zu yank.<Co> [beide] Fenster Einstellungen umschalten.<Ch> [beide] Umschaltungsfenster.<Tab> [beide] Zyklus über Windows.<Cf> [CHAT] -Zyklus über Modi (Mitte, nach rechts halten).<Cc> [beide], um das Chat -Fenster zu schließen.<Cp> [CHAT] Toggle -Sitzungen.<Cu> [CHAT] SCHROREN SIE CHAT -Fenster nach oben.<Cd> [CHAT] Scrollen Sie das Chat -Fenster nach unten.<Ck> [CHAT] zum kopierenden Code/Yank -Code von der letzten Antwort.<Cn> [CHAT] Starten Sie eine neue Sitzung.<Cr> [CHAT] -Daft -Meldung (Meldung erstellen, ohne sie an den Server zu senden)<Cr> [CHAT] Switch -Rolle (Wechsel zwischen Benutzer- und Assistentenrolle, um einen Workflow zu definieren)<Cs> [beide] Umschaltungssystem -Nachrichtenfenster.<Ci> [Fenster bearbeiten] Verwenden Sie die Antwort als Eingabe.<Cd> [Fenster bearbeiten] Zeigen Sie den Diff zwischen linker und rechter und rechter Scheiben an und verwenden Sie Diff-Mode-Befehle Wenn das Einstellfenster geöffnet wird (mit <Co> ), können Einstellungen durch Drücken Enter auf der zugehörigen Konfiguration geändert werden. Einstellungen werden über Abschnitte gespeichert
Fügen Sie diese zu Ihrem WhatKey -Plugin -Mappings für bequeme Bindungen hinzu
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 " } },
},