Plugin ini menambah kemampuan buatan (AI) ke vim dan neovim Anda. Anda dapat menghasilkan kode, mengedit teks, atau melakukan percakapan interaktif dengan model GPT, semuanya didukung oleh API Openai.
Untuk mendapatkan ide apa yang mungkin dilakukan dengan perintah AI, lihat petunjuknya di wiki komunitas
Plugin ini menggunakan API OpenAI untuk menghasilkan respons. Anda perlu menyiapkan akun dan mendapatkan kunci API. Penggunaan API tidak gratis, tetapi biayanya masuk akal dan tergantung pada berapa banyak token yang Anda gunakan, secara sederhana, berapa banyak teks yang Anda kirim dan terima (lihat harga). Perhatikan bahwa plugin tidak mengirim kode Anda di belakang layar. Anda hanya berbagi dan membayar untuk apa yang secara khusus Anda pilih, untuk petunjuk dan konten obrolan.
# 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 "
Lokasi file kunci API default adalah ~/.config/openai.token
, tetapi Anda dapat mengubahnya dengan mengatur g:vim_ai_token_file_path
di file .vimrc
Anda:
let g: vim_ai_token_file_path = ' ~/.config/openai.token '
vim-plug
Plug ' madox2/vim-ai '
Menggunakan paket VIM bawaan :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
Untuk menggunakan perintah AI, ketik perintah diikuti dengan prompt instruksi. Anda juga dapat menggabungkannya dengan pilihan visual. Berikut ini adalah gambaran singkat dari perintah yang tersedia:
========= 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
Tip: Tekan Ctrl-c
kapan saja untuk membatalkan penyelesaian
Kiat: Siapkan binding kunci Anda sendiri atau gunakan pintasan perintah - :AIE
, :AIC
, :AIR
Tip: A custom role {role} can be passed to the above commands by an initial parameter /{role}, for example :AIEdit /grammar
.
Kiat: Gabungkan perintah dengan rentang :help range
, misalnya untuk memilih seluruh buffer - :%AIE fix grammar
Jika Anda tertarik dengan lebih banyak tips atau ingin naik level VIM Anda dengan lebih banyak perintah seperti :GitCommitMessage
- menyarankan pesan komit git, kunjungi wiki komunitas.
Dalam dokumentasi di bawah ini, <selection>
menunjukkan pilihan visual atau rentang lainnya, {instruction}
Instruksi prompt, {role}
peran khusus dan ?
Simbol parameter opsional.
:AI
:AI
- lengkapi teks pada baris saat ini
:AI {prompt}
- lengkapi prompt
<selection> :AI
- lengkapi pilihan
<selection> :AI {instruction}
- lengkapi pilihan menggunakan instruksi
<selection>? :AI /{role} {instruction}?
- Gunakan peran untuk menyelesaikan
:AIEdit
<selection>? :AIEdit
- Edit baris saat ini atau seleksi
<selection>? :AIEdit {instruction}
- Edit baris saat ini atau pilihan menggunakan instruksi
<selection>? :AIEdit /{role} {instruction}?
- Gunakan peran untuk mengedit
:AIChat
:AIChat
- Lanjutkan atau mulai percakapan baru.
<selection>? :AIChat {instruction}?
- Mulailah percakapan baru mengingat pilihan, instruksi atau keduanya
<selection>? :AIChat /{role} {instruction}?
- Gunakan peran untuk menyelesaikan
Ketika AI selesai menjawab, Anda dapat melanjutkan percakapan dengan memasukkan mode insert, menambahkan prompt Anda, dan kemudian menggunakan perintah :AIChat
sekali lagi.
.aichat
Anda dapat mengedit dan menyimpan percakapan obrolan ke file .aichat
dan mengembalikannya nanti. Ini memungkinkan Anda untuk membuat petunjuk kustom yang dapat digunakan kembali, misalnya:
# ./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]
Untuk memasukkan file dalam obrolan, peran khusus include
digunakan:
>>> user
Generate documentation for the following files
>>> include
/home/user/myproject/requirements.txt
/home/user/myproject/**/*.py
Setiap konten file akan ditambahkan ke pesan peran user
tambahan dengan file yang dipisahkan oleh ==> {path} <==
, di mana jalur adalah jalur ke file. Globbing diperluas melalui glob.gob
dan jalur relatif ke direktori kerja saat ini (sebagaimana ditentukan oleh getcwd()
) akan diselesaikan ke jalur absolut.
Supported chat roles are >>> system
, >>> user
, >>> include
and <<< assistant
:AINewChat
:AINewChat {preset shortname}?
- Mulailah percakapan baru
Perintah ini digunakan ketika Anda perlu menelurkan obrolan baru dengan cara tertentu atau dalam situasi ketika :AIChat
biasanya melanjutkan percakapan sebagai gantinya.
Sebagai parameter, Anda meletakkan pintasan preset perintah obrolan terbuka - below
, tab
atau right
. Misalnya :: :AINewChat right
.
:AIRedo
:AIRedo
- ulangi perintah AI terakhir
Gunakan ini segera setelah perintah AI
/ AIEdit
/ AIChat
untuk mencoba kembali atau mendapatkan penyelesaian alternatif. Perhatikan bahwa keacakan respons sangat tergantung pada parameter temperature
.
Dalam konteks plugin ini, peran berarti instruksi dan/atau konfigurasi yang dapat digunakan kembali. Peran didefinisikan dalam file konfigurasi .ini
. Misalnya dengan mendefinisikan peran 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
Sekarang Anda dapat memilih teks dan menjalankannya dengan perintah :AIEdit /grammar
.
Lihat peran-example.ini untuk contoh lebih lanjut.
Plugin ini tidak mengatur ikatan kunci apa pun. Buat binding Anda sendiri di .vimrc
untuk memicu perintah AI, misalnya:
" 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>
Setiap perintah dikonfigurasi dengan variabel konfigurasi yang sesuai. Untuk menyesuaikan konfigurasi default, inisialisasi variabel konfigurasi dengan pilihan opsi, misalnya masukkan ini ke file .vimrc
Anda:
let g: vim_ai_chat = {
" options " : {
" model " : " gpt-4 " ,
" temperature " : 0.2 ,
},
}
Setelah di atas diatur, Anda dapat memodifikasi opsi secara langsung selama sesi VIM:
let g: vim_ai_chat [ ' options ' ][ ' model ' ] = ' gpt-4 '
let g: vim_ai_chat [ ' options ' ][ ' temperature ' ] = 0.2
Atau sesuaikan opsi secara langsung di buffer obrolan:
[chat-options]
model =gpt-4
temperature =0.2
>>> user
generate a paragraph of lorem ipsum
Di bawah ini terdaftar semua opsi konfigurasi yang tersedia, bersama dengan nilai defaultnya. Harap dicatat bahwa tidak ada batasan token yang dikenakan pada model obrolan.
" :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`
Dimungkinkan untuk mengonfigurasi plugin untuk menggunakan titik akhir yang kompatibel dengan openai yang berbeda. Lihat beberapa proyek keren yang tercantum di bagian API khusus di wiki komunitas.
let g: vim_ai_chat = {
" options " : {
" endpoint_url " : " http://localhost:8000/v1/chat/completions " ,
" enable_auth " : 0 ,
},
}
Dimungkinkan untuk mengkonfigurasi model obrolan, seperti gpt-4o
, untuk digunakan dalam :AI
dan :AIEdit
. Model-model ini lebih murah, tetapi saat ini kurang cocok untuk pengeditan/penyelesaian kode, karena mereka merespons dengan teks dan komentar seperti manusia.
Bergantung pada kasus penggunaan, prompt awal yang baik dapat membantu menginstruksikan model obrolan untuk merespons dengan cara yang diinginkan:
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
Anda mungkin menemukan kumpulan perintah khusus yang berguna di wiki komunitas.
To create a custom command, you can call AIRun
, AIEditRun
and AIChatRun
functions. Misalnya:
" 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> )
Kontribusi dipersilakan! Jangan ragu untuk membuka permintaan tarik, melaporkan masalah, atau berkontribusi pada wiki komunitas.
Akurasi : GPT bagus dalam memproduksi teks dan kode yang terlihat benar pada pandangan pertama, tetapi mungkin benar -benar salah. Pastikan untuk meninjau secara menyeluruh, membaca, dan menguji semua output yang dihasilkan oleh plugin ini!
Privasi : Plugin ini mengirimkan teks ke OpenAi saat menghasilkan penyelesaian dan pengeditan. Oleh karena itu, jangan menggunakannya pada file yang berisi informasi sensitif.
Lisensi MIT