Este plug -in adiciona recursos de inteligência artificial (AI) ao seu Vim e Neovim. Você pode gerar código, editar texto ou ter uma conversa interativa com os modelos GPT, todos alimentados pela API do OpenAI.
Para ter uma idéia do que é possível fazer com os comandos da IA, veja os avisos no wiki da comunidade
Este plug -in usa a API do OpenAI para gerar respostas. Você precisará configurar uma conta e obter uma chave da API. O uso da API não é gratuito, mas o custo é razoável e depende de quantos tokens você usa, em termos simples, quanto texto você envia e recebe (consulte os preços). Observe que o plug -in não envia nenhum código nos bastidores. Você compartilha e paga apenas pelo que seleciona especificamente, para obter instruções e conteúdo de bate -papo.
# save api key to `~/.config/openai.token` file
echo " YOUR_OPENAI_API_KEY " > ~ /.config/openai.token
# alternatively set it as an environment variable
export OPENAI_API_KEY= " YOUR_OPENAI_API_KEY "
# or configure it with your organization id
echo " YOUR_OPENAI_API_KEY,YOUR_OPENAI_ORG_ID " > ~ /.config/openai.token
export OPENAI_API_KEY= " YOUR_OPENAI_API_KEY,YOUR_OPENAI_ORG_ID "
A localização padrão do arquivo da chave da API é ~/.config/openai.token
, mas você pode alterá -lo definindo o g:vim_ai_token_file_path
no seu arquivo .vimrc
:
let g: vim_ai_token_file_path = ' ~/.config/openai.token '
vim-plug
Plug ' madox2/vim-ai '
Usando pacotes VIM embutidos :help packages
# vim
mkdir -p ~ /.vim/pack/plugins/start
git clone https://github.com/madox2/vim-ai.git ~ /.vim/pack/plugins/start/vim-ai
# neovim
mkdir -p ~ /.local/share/nvim/site/pack/plugins/start
git clone https://github.com/madox2/vim-ai.git ~ /.local/share/nvim/site/pack/plugins/start/vim-ai
Para usar um comando AI, digite o comando seguido de um prompt de instrução. Você também pode combiná -lo com uma seleção visual. Aqui está uma breve visão geral dos comandos disponíveis:
========= Basic AI commands =========
:AI complete text
:AIEdit edit text
:AIChat continue or open new chat
============= Utilities =============
:AIRedo repeat last AI command
:AINewChat open new chat
:help vim-ai
Dica: pressione Ctrl-c
a qualquer momento para cancelar a conclusão
Dica: configure suas próprias ligações de chave ou use atalhos de comando - :AIE
,: :AIC
:AIR
Dica: uma função personalizada {função} pode ser passada para os comandos acima por um parâmetro inicial /{função}, por exemplo :AIEdit /grammar
.
Dica: Combine comandos com um intervalo :help range
, por exemplo, para selecionar todo o buffer - :%AIE fix grammar
Se você estiver interessado em mais dicas ou gostaria de subir de nível seu VIM com mais comandos como :GitCommitMessage
- sugerindo uma mensagem GIT Commit, visite o Wiki da comunidade.
Na documentação abaixo, <selection>
indica uma seleção visual ou qualquer outro intervalo, {instruction}
um prompt de instrução, {role}
uma função personalizada e ?
Símbolo Um parâmetro opcional.
:AI
:AI
- preencha o texto na linha atual
:AI {prompt}
- preencha o prompt
<selection> :AI
- complete a seleção
<selection> :AI {instruction}
- complete a seleção usando a instrução
<selection>? :AI /{role} {instruction}?
- Use a função para concluir
:AIEdit
<selection>? :AIEdit
- edite a linha atual ou a seleção
<selection>? :AIEdit {instruction}
- Edite a linha atual ou a seleção usando a instrução
<selection>? :AIEdit /{role} {instruction}?
- Use a função para editar
:AIChat
:AIChat
- Continue ou inicie uma nova conversa.
<selection>? :AIChat {instruction}?
- Inicie uma nova conversa dada a seleção, a instrução ou ambos
<selection>? :AIChat /{role} {instruction}?
- Use a função para concluir
Quando a IA terminar de responder, você pode continuar a conversa inserindo o modo de inserção, adicionando seu prompt e usando o comando :AIChat
mais uma vez.
.aichat
arquivos Você pode editar e salvar a conversa de bate -papo em um arquivo .aichat
e restaurá -lo mais tarde. Isso permite criar instruções personalizadas reutilizáveis, por exemplo:
# ./refactoring-prompt.aichat
>>> system
You are a Clean Code expert, I have the following code, please refactor it in a more clean and concise way so that my colleagues can maintain the code more easily. Also, explain why you want to refactor the code so that I can add the explanation to the Pull Request.
>>> user
[attach code]
Para incluir arquivos no bate -papo, é usado uma função include
especial:
>>> user
Generate documentation for the following files
>>> include
/home/user/myproject/requirements.txt
/home/user/myproject/**/*.py
O conteúdo de cada arquivo será adicionado a uma mensagem de função user
adicional com os arquivos separados por ==> {path} <==
, onde o caminho é o caminho para o arquivo. O globbing é expandido via glob.gob
e os caminhos relativos para o diretório de trabalho atual (conforme determinado pelo getcwd()
) serão resolvidos para caminhos absolutos.
As funções de bate -papo suportadas são >>> system
, >>> user
, >>> include
e <<< assistant
:AINewChat
:AINewChat {preset shortname}?
- Comece uma nova conversa
Este comando é usado quando você precisa gerar um novo bate -papo de uma maneira específica ou em situação quando :AIChat
normalmente continuaria conversando.
Como um parâmetro, você coloca um atalho predefinido de comando de bate -papo aberto - below
, tab
ou right
. Por exemplo :: :AINewChat right
.
:AIRedo
:AIRedo
- Repita o último comando da IA
Use isso imediatamente após o comando AI
/ AIEdit
/ AIChat
para re-tratar ou obter uma conclusão alternativa. Observe que a aleatoriedade das respostas depende muito do parâmetro temperature
.
No contexto deste plug-in, uma função significa uma instrução e/ou configuração de IA reutilizáveis. As funções são definidas no arquivo de configuração .ini
. Por exemplo, definindo um papel grammar
:
let g: vim_ai_roles_config_file = ' /path/to/my/roles.ini '
# /path/to/my/roles.ini
[grammar]
prompt = fix spelling and grammar
[grammar.options]
temperature = 0.4
Agora você pode selecionar o texto e executá -lo com comando :AIEdit /grammar
.
Consulte Papéis-Exemplo.ini para obter mais exemplos.
Este plug -in não define nenhuma ligação de chave. Crie suas próprias ligações no .vimrc
para acionar os comandos da IA, por exemplo:
" complete text on the current line or in visual selection
nnoremap <leader> a :AI <CR>
xnoremap <leader> a :AI <CR>
" edit text with a custom prompt
xnoremap <leader> s :AIEdit fix grammar and spelling <CR>
nnoremap <leader> s :AIEdit fix grammar and spelling <CR>
" trigger chat
xnoremap <leader> c :AIChat <CR>
nnoremap <leader> c :AIChat <CR>
" redo last AI command
nnoremap <leader> r :AIRedo <CR>
Cada comando é configurado com uma variável de configuração correspondente. Para personalizar a configuração padrão, inicialize a variável de configuração com uma seleção de opções, por exemplo, coloque -a no seu arquivo .vimrc
:
let g: vim_ai_chat = {
" options " : {
" model " : " gpt-4 " ,
" temperature " : 0.2 ,
},
}
Depois que o acima estiver definido, você pode modificar as opções diretamente durante a sessão do VIM:
let g: vim_ai_chat [ ' options ' ][ ' model ' ] = ' gpt-4 '
let g: vim_ai_chat [ ' options ' ][ ' temperature ' ] = 0.2
Ou personalize as opções diretamente no buffer de bate -papo:
[chat-options]
model =gpt-4
temperature =0.2
>>> user
generate a paragraph of lorem ipsum
Abaixo estão listados todas as opções de configuração disponíveis, juntamente com seus valores padrão. Observe que não há limite de token imposto ao modelo de bate -papo.
" :AI
" - engine: complete | chat - see how to configure chat engine in the section below
" - options: openai config (see https://platform.openai.com/docs/api-reference/completions)
" - options.request_timeout: request timeout in seconds
" - options.enable_auth: enable authorization using openai key
" - options.selection_boundary: selection prompt wrapper (eliminates empty responses, see #20)
" - ui.paste_mode: use paste mode (see more info in the Notes below)
let g: vim_ai_complete = {
" engine " : " complete " ,
" options " : {
" model " : " gpt-3.5-turbo-instruct " ,
" endpoint_url " : " https://api.openai.com/v1/completions " ,
" max_tokens " : 1000 ,
" temperature " : 0.1 ,
" request_timeout " : 20 ,
" enable_auth " : 1 ,
" selection_boundary " : " ##### " ,
},
" ui " : {
" paste_mode " : 1 ,
},
}
" :AIEdit
" - engine: complete | chat - see how to configure chat engine in the section below
" - options: openai config (see https://platform.openai.com/docs/api-reference/completions)
" - options.request_timeout: request timeout in seconds
" - options.enable_auth: enable authorization using openai key
" - options.selection_boundary: selection prompt wrapper (eliminates empty responses, see #20)
" - ui.paste_mode: use paste mode (see more info in the Notes below)
let g: vim_ai_edit = {
" engine " : " complete " ,
" options " : {
" model " : " gpt-3.5-turbo-instruct " ,
" endpoint_url " : " https://api.openai.com/v1/completions " ,
" max_tokens " : 1000 ,
" temperature " : 0.1 ,
" request_timeout " : 20 ,
" enable_auth " : 1 ,
" selection_boundary " : " ##### " ,
},
" ui " : {
" paste_mode " : 1 ,
},
}
" This prompt instructs model to work with syntax highlighting
let s: initial_chat_prompt = << trim END
>>> system
You are a general assistant.
If you attach a code block add syntax type after ``` to enable syntax highlighting.
END
" :AIChat
" - options: openai config (see https://platform.openai.com/docs/api-reference/chat)
" - options.initial_prompt: prompt prepended to every chat request (list of lines or string)
" - options.request_timeout: request timeout in seconds
" - options.enable_auth: enable authorization using openai key
" - options.selection_boundary: selection prompt wrapper (eliminates empty responses, see #20)
" - ui.populate_options: put [chat-options] to the chat header
" - ui.open_chat_command: preset (preset_below, preset_tab, preset_right) or a custom command
" - ui.scratch_buffer_keep_open: re-use scratch buffer within the vim session
" - ui.paste_mode: use paste mode (see more info in the Notes below)
let g: vim_ai_chat = {
" options " : {
" model " : " gpt-4o " ,
" endpoint_url " : " https://api.openai.com/v1/chat/completions " ,
" max_tokens " : 0 ,
" temperature " : 1 ,
" request_timeout " : 20 ,
" enable_auth " : 1 ,
" selection_boundary " : " " ,
" initial_prompt " : s: initial_chat_prompt ,
},
" ui " : {
" code_syntax_enabled " : 1 ,
" populate_options " : 0 ,
" open_chat_command " : " preset_below " ,
" scratch_buffer_keep_open " : 0 ,
" paste_mode " : 1 ,
},
}
" Notes:
" ui.paste_mode
" - if disabled code indentation will work but AI doesn't always respond with a code block
" therefore it could be messed up
" - find out more in vim's help `:help paste`
" options.max_tokens
" - note that prompt + max_tokens must be less than model's token limit, see #42, #46
" - setting max tokens to 0 will exclude it from the OpenAI API request parameters, it is
" unclear/undocumented what it exactly does, but it seems to resolve issues when the model
" hits token limit, which respond with `OpenAI: HTTPError 400`
É possível configurar o plug-in para usar diferentes pontos de extremidade compatíveis com o OpenAI. Veja alguns projetos legais listados na seção APIs personalizadas no Wiki da comunidade.
let g: vim_ai_chat = {
" options " : {
" endpoint_url " : " http://localhost:8000/v1/chat/completions " ,
" enable_auth " : 0 ,
},
}
É possível configurar modelos de bate-papo, como gpt-4o
, a serem usados em :AI
e :AIEdit
Comandos. Esses modelos são mais baratos, mas atualmente menos adequados para edição/conclusão de código, à medida que respondem com texto e comentário do tipo humano.
Dependendo do caso de uso, um bom prompt inicial pode ajudar a instruir o modelo de bate -papo a responder da maneira desejada:
let initial_prompt = << trim END
>>> system
You are going to play a role of a completion engine with following parameter s:
Task: Provide compact code/text completion, generation, transformation or explanation
Topic: general programming and text editing
Style: Plain result without any commentary, unless commentary is necessary
Audience: Users of text editor and programmers that need to transform/generate text
END
let chat_engine_config = {
" engine " : " chat " ,
" options " : {
" model " : " gpt-4o " ,
" endpoint_url " : " https://api.openai.com/v1/chat/completions " ,
" max_tokens " : 0 ,
" temperature " : 0.1 ,
" request_timeout " : 20 ,
" selection_boundary " : " " ,
" initial_prompt " : initial_prompt,
},
}
let g: vim_ai_complete = chat_engine_config
let g: vim_ai_edit = chat_engine_config
Você pode achar útil uma coleção de comandos personalizados no wiki da comunidade.
Para criar um comando personalizado, você pode chamar as funções AIRun
, AIEditRun
e AIChatRun
. Por exemplo:
" custom command suggesting git commit message, takes no arguments
function ! GitCommitMessageFn ()
let l: diff = system ( ' git --no-pager diff --staged ' )
let l: prompt = " generate a short commit message from the diff below: n " . l: diff
let l: config = {
" engine " : " chat " ,
" options " : {
" model " : " gpt-4o " ,
" initial_prompt " : " >>> system n you are a code assistant " ,
" temperature " : 1 ,
},
}
call vim_ai#AIRun ( l: config , l: prompt )
endfunction
command ! GitCommitMessage call GitCommitMessageFn ()
" custom command that provides a code review for selected code block
function ! CodeReviewFn ( range ) range
let l: prompt = " programming syntax is " . & filetype . " , review the code below "
let l: config = {
" options " : {
" initial_prompt " : " >>> system n you are a clean code expert " ,
},
}
exe a: firstline . " , " . a: lastline . " call vim_ai#AIChatRun(a:range, l:config, l:prompt) "
endfunction
command ! - range = 0 CodeReview <line1> , <line2> call CodeReviewFn ( <count> )
As contribuições são bem -vindas! Sinta -se à vontade para abrir uma solicitação de tração, relatar um problema ou contribuir com o wiki da comunidade.
Precisão : o GPT é bom em produzir texto e código que parecem corretos à primeira vista, mas pode estar completamente errado. Certifique -se de revisar, ler e testar completamente toda a saída gerada por este plug -in!
Privacidade : Este plug -in envia texto para o OpenAI ao gerar conclusões e edições. Portanto, não o use em arquivos contendo informações confidenciais.
MIT Licença