ChatGPT é um plug -in Neovim que permite que você utilize sem esforço a API do OpenAi ChatGPT, capacitando você a gerar respostas de linguagem natural do ChatGPT do OpenAI diretamente dentro do editor em resposta às suas perguntas.

Perguntas e respostas interativas : Envolva-se em sessões interativas de perguntas e respostas com o poderoso modelo GPT (CHATGPT) usando uma interface intuitiva.
Conversas baseadas em persona : Explore várias perspectivas e tenha conversas com diferentes personas, selecionando prompts de impressionantes impressionantes de chatgpt.
Assistência à edição de código : aprimore sua experiência de codificação com uma janela de edição interativa alimentada pelo modelo GPT, oferecendo instruções adaptadas para tarefas de codificação.
Conclusão do código : Aproveite a conveniência da conclusão do código semelhante ao GitHub Copilot, alavancando os recursos do modelo GPT para sugerir trechos e conclusões de código com base em padrões de contexto e programação.
Ações personalizáveis : execute uma série de ações utilizando o modelo GPT, como correção gramatical, tradução, geração de palavras -chave, criação de documentos, adição de teste, otimização de código, resumo, correção de bugs, explicação de código, edição de roxygen e análise de legibilidade. Além disso, você pode definir suas próprias ações personalizadas usando um arquivo JSON.
Para uma compreensão abrangente da funcionalidade da extensão, você pode assistir a um vídeo de exibição de plug -in
Verifique se você está curl .
Obtenha uma chave da API do OpenAI, que você pode obter aqui. (Nota: Atualmente, uma assinatura ChatGPT Plus não inclui os créditos de API necessários. Você terá que comprar créditos da API separadamente.)
A chave da API OpenAI pode ser fornecida em uma das duas maneiras a seguir:
Na opção de configuração api_key_cmd , forneça o caminho e os argumentos a um executável que retorna a chave da API via stdout.
Definindo -o através de uma variável de ambiente chamada $OPENAI_API_KEY .
Host API Open Custom com a opção de configuração api_host_cmd ou Variável de ambiente chamada $OPENAI_API_HOST . É útil se você não pode acessar o OpenAI diretamente
Os parâmetros CURL personalizados podem ser passados usando a opção de configuração extra_curl_params . Pode ser útil se você precisar incluir cabeçalhos adicionais para solicitações:
{
... ,
extra_curl_params = {
" -H " ,
" Origin: https://example.com "
}
}Para implantações do Azure, você precisa especificar a base de URL, o motor e o tipo API. Você pode fazer isso de duas maneiras:
api_type_cmd , azure_api_base , azure_api_engine_cmd e azure_api_version_cmd . Cada um deles deve ser um comando executável que retorne o valor correspondente.Por exemplo:
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 e $OPENAI_API_AZURE_VERSION .Por exemplo:
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 "Observe que os modelos de edição foram preteridos e podem não funcionar conforme o esperado.
Se você estiver usando o packer.nvim como gerenciador de plug -in:
-- 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 "
}
})ou se você estiver usando preguiçoso.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 vem com os seguintes padrões, você pode substituí -los passando a configuração como param de configuração
https://github.com/jackmort/chatgpt.nvim/blob/main/lua/chatgpt/config.lua
Uma configuração simples do modelo de bate -papo pode parecer algo assim:
{
" 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 "
}
}O fornecimento da chave da API OpenAI por meio de uma variável de ambiente é perigoso, pois deixa a chave da API facilmente legível por qualquer processo que possa acessar as variáveis de ambiente de outros processos. Além disso, incentiva o usuário a armazenar a credencial em texto transparente em um arquivo de configuração.
Como alternativa para fornecer a chave da API através da variável de ambiente OPENAI_API_KEY , o usuário é incentivado a usar a opção de configuração api_key_cmd . A opção de configuração api_key_cmd leva uma string, que é executada na inicialização e cuja saída é usada como a tecla API.
A configuração a seguir usaria o 1Passwords CLI, op , para buscar a chave da API no campo de credential da entrada do OpenAI .
require ( " chatgpt " ). setup ({
api_key_cmd = " op read op://private/OpenAI/credential --no-newline "
})A configuração a seguir usaria o GPG para descriptografar um arquivo local que contém a chave da API
local home = vim . fn . expand ( " $HOME " )
require ( " chatgpt " ). setup ({
api_key_cmd = " gpg --decrypt " .. home .. " /secret.txt.gpg "
}) Observe que os argumentos api_key_cmd são divididos por Whitespace. Se você precisar de espaço em branco dentro de um argumento (por exemplo, para referenciar um caminho com espaços), poderá envolvê -lo em um script separado.
O plug -in expõe os seguintes comandos:
ChatGPT Comando ChatGPT , que abre a janela interativa usando o modelo gpt-3.5-turbo . (também conhecido como ChatGPT )
ChatGPTActAs Comando ChatGPTActAs , que abre uma seleção rápida de incríveis solicitações de chatgpt para serem usados com o modelo gpt-3.5-turbo .

ChatGPTEditWithInstructions ChatGPTEditWithInstructions Comando que abre a janela interativa para editar texto selecionado ou janela inteira usando o modelo code-davinci-edit-001 (GPT 3.5 Fine Tune para codificação).
Você pode mapeá-lo usando a API Lua, por exemplo, 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 executa ações específicas - consulte actions.json arquive uma lista detalhada. As ações disponíveis são:
grammar_correctiontranslatekeywordsdocstringadd_testsoptimize_codesummarizefix_bugsexplain_coderoxygen_editcode_readability_analysis - veja demonstração Todas as ações acima estão usando o modelo gpt-3.5-turbo .
É possível definir ações personalizadas com um arquivo json. Consulte actions.json para um exemplo. O caminho das ações personalizadas pode ser definido na configuração (consulte o campo actions_paths no exemplo de configuração acima).
Um exemplo de ação personalizada pode ser assim: ( # marca comentários)
{
"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"
}
}
}
} A estratégia edit consiste em mostrar a saída lado a lado com a entrada e disponível para mais solicitações de edição. Por enquanto, a estratégia edit é implementada apenas para tipo de chat .
A estratégia display mostra a saída em uma janela de flutuação.
append e replace modifique o texto diretamente no buffer.
Ao usar ChatGPT e ChatGPTEditWithInstructions , as seguintes pedidos de Keybindings estão disponíveis:
<C-Enter> [ambos] para enviar.<Cy> [ambos] para copiar/Yank Last Resposta.<Co> [Ambos] Alternação Configurações da janela.<Ch> [Ambos] Alternar a janela de ajuda.<Tab> [Ambos] Ciclo sobre o Windows.<Cf> [CHAT] Ciclo sobre os modos (centro, siga à direita).<Cc> [ambos] para fechar a janela de bate -papo.<Cp> [CHAT] Lista de sessões de alternância.<Cu> [CHAT] Role a janela de bate -papo.<Cd> [CHAT] Role para baixo a janela de bate -papo.<Ck> [CHAT] para copiar/yank código da última resposta.<Cn> [CHAT] Inicie a nova sessão.<Cr> [CHAT] Mensagem de rascunho (Crie mensagem sem enviá -la para o servidor)<Cr> [CHAT] Switch (alterne entre o usuário e a função de assistente para definir um fluxo de trabalho)<Cs> [Ambos] TOLGGL SYSTEM Mensagem Janela.<Ci> [Editar Janela] Use a resposta como entrada.<Cd> [Editar Janela] Veja o diferencial entre os painéis esquerdo e direito e use comandos de modo diff-mode Quando a janela de configuração é aberta (com <Co> ), as configurações podem ser modificadas pressionando Enter na configuração relacionada. As configurações são salvas nas seções
Adicione -os aos seus mapeamentos de plug -in que Keye para vinculares 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 " } },
},