Neoai adalah plugin Neovim yang membawa kekuatan GPT-4 Openai langsung ke editor Anda. Ini membantu Anda menghasilkan kode, menulis ulang teks, dan bahkan mendapatkan saran dalam konteks dengan kode Anda. Plugin ini dibangun dengan antarmuka yang ramah pengguna, membuatnya mudah untuk berinteraksi dengan AI dan mendapatkan bantuan yang Anda butuhkan.
Catatan: Plugin ini di awal perubahan awal dan dapat berubah.
Motivasi utama di balik plugin ini adalah untuk memberikan integrasi yang mulus dari bantuan obrolan AI, seperti chatgpt, ke dalam alur kerja pengkodean neovim Anda. Tujuannya adalah untuk membuat alat yang bekerja selaras dengan Anda, memungkinkan Anda untuk mengajukan pertanyaan dan menerima bantuan tanpa mengganggu fokus atau pengkodean ritme Anda. Tidak seperti kebanyakan plugin yang ada, yang cenderung memprioritaskan hiburan daripada produktivitas, plugin ini menekankan efisiensi dan utilitas. Dengan memfasilitasi pengalaman pengkodean yang lancar dan responsif, ini bertujuan untuk meningkatkan produktivitas dan membuat pengkodean lebih menyenangkan.
Untuk menginstal Neoai, Anda dapat menggunakan manajer plugin favorit Anda. Misalnya, dengan VIM-plug, tambahkan baris berikut ke init.vim
atau .vimrc
Anda, perhatikan bahwa itu juga memerlukan ketergantungan NUI dan keriting yang diinstal pada sistem:
Plug 'MunifTanjim/nui.nvim'
Plug 'Bryley/neoai.nvim'
Kemudian jalankan :PlugInstall
untuk menginstal plugin.
Untuk malas.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 ,
}
Untuk 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 ,
})
Untuk menggunakan plugin ini, pastikan Anda memiliki kunci API OpenAI yang dapat dibuat di sini. Simpan kunci ini di variabel lingkungan Anda sebagai OPENAI_API_KEY
.
Catatan Penting : Plugin ini tidak bertanggung jawab atas pembelian yang tidak disengaja yang dilakukan untuk Openai. Saat menggunakan plugin ini, saya akan merekomendasikan Anda sering memeriksa penggunaan akun dan batasan pengaturan, sehingga Anda tidak menghabiskan lebih banyak yang Anda mampu.
Plugin ini memperkenalkan 3 mode atau cara untuk berinteraksi dengan model AI.
Dalam mode default, GUI terbuka di samping menggunakan perintah :NeoAI
, memungkinkan Anda untuk mengobrol dengan model. Operasi ini mirip dengan apa yang Anda dapatkan saat menggunakannya di browser, tetapi sekarang dibuat lebih nyaman oleh GUI berada di dalam editor Anda.
Di buffer prompt, Anda dapat mengirim teks dengan menekan enter saat dalam mode insert. Selain itu, Anda dapat memasukkan garis baru dengan menggunakan Control Enter. Pemetaan ini dapat diubah di konfigurasi.
Perhatikan juga bahwa plugin memiliki fitur di mana output dari model secara otomatis disimpan ke register g
dan semua cuplikan kode disimpan ke register c
Ini dapat diubah di konfigurasi.
Mode konteks bekerja mirip dengan mode normal. Namun, Anda memiliki kemampuan untuk memberikan informasi tambahan tentang apa yang ingin Anda ubah. Misalnya, jika Anda membaca kode orang lain dan memerlukan deskripsi tentang apa yang dilakukannya, Anda dapat menyorot kode dalam buffer melalui mode visual. Kemudian, Anda dapat menjalankan :NeoAIContext
dan ketik sesuatu seperti "tolong jelaskan kode ini untuk saya" di buffer prompt.
Selain itu, Anda dapat menyorot beberapa teks dan meminta "memperbaiki tanda baca dan tata bahasa dalam teks ini" untuk mendapatkan versi teks yang lebih baik.
Perhatikan bahwa jika Anda menjalankan perintah tanpa pilihan apa pun maka seluruh buffer dilewatkan.
Mode terakhir dikenal sebagai "mode injeksi" dengan menggunakan :NeoAIInject
. Mode ini beroperasi tanpa antarmuka pengguna grafis, memungkinkan Anda untuk dengan cepat mengirim prompt ke model dan memiliki output yang dihasilkan secara otomatis dimasukkan di bawah kursor Anda. Semua ini dapat dilakukan tanpa membuka GUI. Selain itu, ada sub-mode dalam mode injeksi yang dapat dieksekusi dengan konteks.
Salah satu fitur plugin ini adalah membuat pintasan, yang dijelaskan di bawah ini. Plugin ini mencakup dua pintasan bawaan; Yang pertama memformat teks yang dipilih untuk meningkatkan keterbacaan, dengan ikatan kunci default menjadi <leader>as
(A untuk AI dan S untuk meringkas).
Pintasan bawaan lainnya adalah Auto menghasilkan pesan komit git untuk Anda:
Perhatian : Perlu diketahui bahwa fitur ini secara berlebihan dapat menyebabkan akumulasi data yang dikirim ke model, yang dapat menghasilkan biaya tinggi. Untuk menghindari hal ini, disarankan agar komitmen yang lebih kecil dibuat atau fitur lebih jarang digunakan. Sangat penting untuk melacak penggunaan Anda, yang dapat dipantau melalui tautan ini
Untuk mengatur plugin, tambahkan kode berikut dengan nilai default ke init.lua
Anda (atau letakkan di bawah opsi config
jika menggunakan lazy.nvim atau packer.nvim.
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 ,
},
},
})
Fungsi Pengaturan menerima tabel opsi untuk mengonfigurasi plugin. Opsi yang tersedia adalah sebagai berikut:
output_popup_text
: Teks header ditampilkan pada jendela popup output (default: "neoai").input_popup_text
: Teks header ditampilkan pada jendela popup input (default: "prompt").width
: Lebar jendela sebagai persentase (misalnya, 30 = 30%, default: 30).output_popup_height
: Tinggi popup output sebagai persentase (misalnya, 80 = 80%, default: 80).submit
: Ikatan kunci untuk mengirimkan prompt. Jika diatur ke, akan dipetakan untuk memasukkan garis baru. (bawaan: "").models
: Daftar model untuk digunakan:name
: Nama Penyedia Model (mis. "Openai")model
: Entah string nama model untuk digunakan atau daftar nama modelparams
: Tabel parameter untuk masuk ke dalam model (mis. Suhu, top_p)register_output
: Tabel dengan register sebagai kunci dan fungsi yang mengambil output mentah dari AI dan mengeluarkan apa yang ingin Anda simpan ke dalam register itu. Contoh: register_output = {
[ " g " ] = function ( output )
return output
end ,
[ " c " ] = require ( " neoai.utils " ). extract_code_snippets ,
}
cutoff_width
: Saat menyuntikkan, jika teks menjadi lebih lama dari nilai ini, ia harus masuk ke baris baru. Jika diatur ke NIL, panjang diabaikan (default: 75).context_prompt
: Fungsi yang menghasilkan prompt untuk digunakan saat menggunakan mode konteks. Contoh: 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
(usang, gunakan api_key.env
sebagai gantinya): Variabel lingkungan yang berisi kunci API openai. Nilai defaultnya adalah "openai_api_key".api_key.env
: Variabel lingkungan yang berisi kunci API OpenAI. Nilai defaultnya adalah "openai_api_key".api_key.value
: Kunci API OpenAI, yang lebih diutamakan daripada api_key .env
.api_key.get
: Fungsi yang mengambil kunci API OpenAI. Untuk contoh implementasi, lihat bagian pengaturan. Ini memiliki prioritas yang lebih tinggi. mappings
: Tabel yang berisi tindakan berikut yang bisa menjadi kunci:
select_up
: Memilih jendela Output saat di jendela Inputselect_down
: Memilih jendela Input saat di jendela Output Nilainya adalah keybinding untuk tindakan itu atau nil
jika tidak ada tindakan
shortcuts
: Sederetan pintasan. Setiap jalan pintas adalah tabel yang berisi:name
: String. Nama jalan pintas, dapat memicu menggunakan: neoaishortcutkey
: Nilai keybind untuk mendengarkan atau nihil jika tidak ada kunci untuk pintasan.desc
string atau nol. Deskripsi keybind jika adause_context
: Jika konteks dari seleksi/buffer harus digunakan.prompt
: Prompt untuk mengirim atau fungsi untuk menghasilkan prompt untuk mengirim.modes
: Daftar mode untuk mengatur keybind up untuk "n" untuk normal, "v" untuk visual.strip_function
: Fungsi strip untuk digunakan (opsional). Smart mengacak jendela neoai. Jika jendela ditutup, itu akan membuka dan mengirim opsional [prompt]. Jika jendela terbuka dan fokus, itu akan ditutup, akhirnya jika jendela terbuka tetapi tidak fokus, itu akan memfokuskan jendela dan mengirim [prompt] opsional.
Mengalihkan jendela neoai. Jika jendela ditutup, itu akan membuka dan mengirim opsional [prompt]. Jika jendela terbuka, itu akan ditutup.
Membuka jendela Neoai dan mengirimkan [prompt] opsional.
Menutup jendela neoai.
Smart mengubah jendela neoai dengan konteks. Jika jendela ditutup, itu akan membuka dan mengirim opsional [prompt]. Jika jendela terbuka dan fokus, itu akan ditutup, akhirnya jika jendela terbuka tetapi tidak fokus, itu akan memfokuskan jendela dan mengirim [prompt] opsional. Konteks yang digunakan untuk perintah ini adalah teks yang dipilih secara visual atau seluruh buffer jika tidak ada pilihan yang dibuat.
Membuka jendela Neoai dengan konteks dan mengirimkan [prompt] opsional. Konteks yang digunakan untuk perintah ini adalah teks yang dipilih secara visual atau seluruh buffer jika tidak ada pilihan yang dibuat.
Menutup jendela neoai dengan konteks.
Mengirimkan [prompt] ke AI dan langsung menyuntikkan respons AI ke buffer tanpa membuka jendela Neoai.
Mengirimkan [prompt] ke AI dan langsung menyuntikkan respons AI ke buffer tanpa membuka jendela Neoai. Responsnya akan dilucuti dari semuanya kecuali cuplikan kode.
Mengirimkan [prompt] ke AI dengan konteks dan secara langsung menyuntikkan respons AI ke buffer tanpa membuka jendela Neoai. Konteks yang digunakan untuk perintah ini adalah teks yang dipilih secara visual atau seluruh buffer jika tidak ada pilihan yang dibuat.
Mengirimkan [prompt] ke AI dengan konteks dan secara langsung menyuntikkan respons AI ke buffer tanpa membuka jendela Neoai. Responsnya akan dilucuti dari semuanya kecuali cuplikan kode. Konteks yang digunakan untuk perintah ini adalah teks yang dipilih secara visual atau seluruh buffer jika tidak ada pilihan yang dibuat.
Memicu jalan pintas neoai yang dibuat di konfigurasi melalui namanya alih -alih keybinding.
Berlisensi di bawah lisensi MIT. Periksa file lisensi untuk detailnya.